hdu 1284 钱币兑换问题 完全背包
2013-08-11 00:40
423 查看
钱币兑换问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4312 Accepted Submission(s): 2438
[align=left]Problem Description[/align]
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
[align=left]Input[/align]
每行只有一个正整数N,N小于32768。
[align=left]Output[/align]
对应每个输入,输出兑换方法数。
[align=left]Sample Input[/align]
2934 12553
[align=left]Sample Output[/align]
718831 13137761
看题,发现不计数量,那就是完全背包的问题了。。不过自己还是想不出来状态转移方程。
看了大牛的方法 :
dp[j]=dp[j]+dp[j-i];
其实就是依次采用1分 2分 3分的。
每一次要达到 j 元,要么就是不采用第i分,要么就是采用第i分,所以就要加上 j-i 分的方法数。
为什么DP【0】等于1呢 因为要产生0元的情况只有一种 就是 0个1分 0个2分 0个3分(即 0 0 0 )
其实DP就是在思考一个能得到当前状态最优解的状态转移方程,要学会思考。
这道题还有还有很多做法,什么母函数什么的 可惜我不会。。
#include<iostream> #include<cstdio> using namespace std; int dp[40000]; int main() { memset(dp,0,sizeof(dp)); int i,j,n; dp[0]=1; for(i=1;i<=3;i++) { for(j=i;j<32768;j++) { dp[j]=dp[j]+dp[j-i]; } } while(~scanf("%d",&n)) { cout<<dp <<endl; } return 0; }
相关文章推荐
- 【完全背包/母函数】HDU1284钱币兑换问题
- hdu 1284 钱币兑换问题(完全背包)
- HDU-1284-钱币兑换问题(完全背包)
- HDU 1284 钱币兑换问题 完全背包
- hdu 1284 钱币兑换问题(完全背包 变形---求方案总数)
- HDU 1284 钱币兑换问题 母函数 or 完全背包
- HDU 1284(钱币兑换问题)完全背包求方案总数
- 【完全背包】HDU 1284 钱币兑换问题
- HDU 1284 钱币兑换问题 完全背包
- hdu1284 sdut2777 钱币兑换问题(完全背包,递推,母函数)
- hdu 1284 钱币兑换问题(完全背包 母函数)
- HDU 1284 钱币兑换问题 (完全背包)
- HDU 1284 钱币兑换问题 完全背包求方案数
- HDU 1284 钱币兑换问题(完全背包:入门题)
- HDU 1284 钱币兑换问题(母函数,完全背包)
- hdu 1284 钱币兑换问题 完全背包
- hdu 1284 钱币兑换问题 完全背包基础题
- HDU 1284 钱币兑换问题 完全背包
- hdu 1284 钱币兑换【完全背包问题】
- hdu 1284 钱币兑换问题 完全背包之方案总数~