题目

我们用dp[n]表示用这些硬币组成n的方法总数。。。。

然后随着硬币种类的增加来更新dp[]的值,也就是最外面的一层循环for(i :1-->3)开始初始化的时候没有硬币,然后新来了面值为1的硬币,接着又来了面值为2的硬币。。。。

显然,每新增加一种面值的硬币,dp[]的值一定在增加。。。新的dp[] = 未新增前的dp[] + dp[1件新增硬币] + dp[2件新增硬币] + dp[3件新增硬币] +.......dp[k件新增硬币]

由于for里用了完全背包里的顺序,for(j = c[i]; j <= n; j++),所以dp[j] += dp[j - c[i]];中的dp[j - c[i]]已经是有k件新增硬币的状态了。。。。。

即j不停地向右,开始的时候得到只有一个新增硬币而组成n的总数,然后由只有1个新增硬币的结果得到只有2个新增硬币而组成n的总数,慢慢地,。。。。得到由越来越多件新增硬币组成n的总数得到的dp[i]就是该容量下的总数了
上面的解释是复制来的,总之一句话:不停的更新的dp的值。
#include<stdio.h>
#include<string.h>
int main()
{
int n;
int dp[32778];
while(~scanf("%d",&n))
{
memset(dp,0,sizeof(dp));
dp[0]=1;
for(int i=1;i<=3;i++)
{
for(int j=i; j<=n; j++)
{
dp[j] += dp[j - i];// printf("dp[%d]=%d \t",j,dp[j]);
}//printf("\n");
}
printf("%d\n",dp[n]);
}
return 0;
}

最新文章

  1. 谷歌chrome浏览器www.tradeadexchange.com广告弹窗跳转劫持病毒
  2. 【续集】塞翁失马,焉知非福:由 Styles.Render 所引发 runAllManagedModulesForAllRequests=&quot;true&quot; 的思考
  3. 年底了,特贡献一些C#有意思的算法题
  4. 使用::before和::after来完成尖角效果
  5. bzoj3756: Pty的字符串
  6. C语言之函数可变参数
  7. (译)【Unity教程】使用Unity开发Windows Phone上的横版跑酷游戏
  8. PADS Layout 使用
  9. BP神经网络分类器的设计
  10. windows下VC界面 DIY系列1----写给想要写界面的C++程序猿的话
  11. 一个web应用的诞生--数据表单
  12. [实例]JAVA生成字母+随机数字并生成文件
  13. Java Concurrency in Practice&mdash;&mdash;读书笔记
  14. PHP性能分析——xhprof(window 安装xhporf)
  15. 手动增加pe节并修改oep
  16. BZOJ 1093 最大半连通子图 题解
  17. Immunity Debugger学习笔记
  18. 使用plsql进行查询的时候出现错误:动态执行表不可访问,本会话的自动统计被终止
  19. Axios的基本使用
  20. placement new

热门文章

  1. oracle 理解执行计划
  2. Hive—学习笔记(一)
  3. select 1 与 select null (转)
  4. mysql开通tcp远程连接
  5. for循环语句个人小结
  6. Windows XP with SP3大客户免激活日文版
  7. ccf认证模拟题之三---最大的矩形
  8. River Hopscotch
  9. Plants vs. Zombies(二分好题+思维)
  10. 使用HttpModule实现网址重写和HttpHandler实现页面静态化冲突的解决办法