概述
根据题目输入的是 H 和 D 的个数,用a [ i ] [ j ]代表有i个 H 和j个 D 的序列的种数。
考虑最后一个字母是 H 还是 D 的情况,最后一个字母是 D 的情况的序列种数是a [ i ][ j-1 ],最后一个字母是 H 的情况的序列种数是a [ i-1 ][ j ]。
则 :a [ i ][ j ] = a [ i-1 ][ j ] + a [ i ][ j-1 ];
#include<stdio.h>
#include<iostream>
using namespace std;
long long dp[30][30];
void fun(){
int i,j;
for(i=0;i<=20;i++){
dp[i][0]=1;
}
for(j=1;j<=20;j++){
for(i=j;i<=20;i++){
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
}
int main(){
int n,m,i,j;
fun();
while(~scanf("%d%d",&n,&m)){
printf("%I64dn",dp[n][m]);
}
return 0;
}
最后
以上就是忧伤蜜蜂为你收集整理的hdu 1267 下沙的沙子有几粒?(递推&DP)的全部内容,希望文章能够帮你解决hdu 1267 下沙的沙子有几粒?(递推&DP)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复