摘要: 递推题意:给出n和k,用k个数字(可以相同)使他们的和为n,问有多少种方案数,其中好像a+b,b+a这种算为两种方案,也就是考虑排列这个问题用递推来做,按位递推。dp[c][s]表示在利用c个数字的条件下相加得s的方案数dp[c][s]=dp[c-1][s]+dp[c-1][s-1]+dp[c-1][s-2]……dp[c-1][0]另外需要初始化无论多少位,相加和位0的话方案数是1,即全部为0,所以dp[c][0]=1另外当只有一个数字时要相加和为s,方案数也是1,即只能填s本身,dp[1][s]=1然后就可以开始递推了我是用记忆化搜索来写的#include <cstdio>#in 阅读全文
posted @ 2013-02-17 22:13 Titanium 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 递推题意:给出n和k,可用的数字为0,1,2……k,一共有n位数字,现在要求得到一种排列,相邻两个数字相差不超过1,问这种排列的个数占全排列总数的比列要得到全排列的个数就是(k+1)^n , 要得到这个特殊的排列个数用递推即可dp[j][i]=dp[j-1][i-1]+dp[j][i-1]+dp[j+1][i-1];dp[j][i]的意义为第i位数字填j有多少种可能,那么第i位填了j,第i-1必定只可能填j-1,j,j+1才能保证相邻两位差不超过1但主要j=0和j=k的情况另外dp数值要用double#include <cstdio>#include <cstring> 阅读全文
posted @ 2013-02-17 21:21 Titanium 阅读(930) 评论(0) 推荐(0) 编辑