HDU 1284 钱币兑换问题 动态规划完全背包
http://acm.hdu.edu.cn/showproblem.php?pid=1284
题意:
给个整数N(分),只能用1分,2分,3分,进行兑换,计算出有多少种兑换方法。
坑爹:
简单的完全背包。
解法:
当前的兑换方法 f [ j ] 等于放入某一种钱币和没放入某一种钱币之和,放入某种钱币又分放了多少个,
将放了1到最多个的 方法加起来就是放入某种钱币之和 。
View Code
1 #include<iostream> 2 using namespace std; 3 4 const int maxn = 32768 + 10; 5 const int INF = -1 * 0x7fffffff; 6 int n; 7 int f[maxn]; 8 9 int max(int a,int b) 10 { 11 return a > b ? a : b; 12 } 13 14 void Complete(int cost) 15 { 16 int j; 17 for(j=cost; j<=n; j++) 18 { 19 f[j] += f[j-cost]; 20 } 21 } 22 23 int main() 24 { 25 while(cin>>n) 26 { 27 int i; 28 memset(f,0,sizeof(f)); 29 f[0]=1; 30 for(i=1; i<=3; i++) 31 { 32 Complete(i); 33 } 34 cout<<f[n]<<endl; 35 } 36 return 0; 37 }

浙公网安备 33010602011771号