标签:
Problem Description1 1 3 0 0 0
4题目中说的问题是有1 2 5三中硬币及其数量,问你用这些硬币不能组成的最小数字是多少。一开始没有思路,后来看了其他人的博客说用母函数,大概看了一下母函数的,本人也是初学母函数,这题算是母函数入门题,比较简单,模拟多项式乘积就行,由于本人也是初学母函数,我在这就不介绍母函数了,网上好多资料,我觉得杭电的ppt比较好。三种硬币要组合起来可以看成是多项式相乘,比如一个价值为1的硬币和一个价值为2的硬币组合可以看成是(1+x)*(1+x^2)=1+x+x^2+x^3;每一项的指数代表组合后的价值,系数表示组成该价值的方法数。关键在于如何模拟多项式相乘。View Code1 #include <iostream>
2 #include <cstring>
3 using namespace std;
4
5 int main()
6 {
7 int n,m,k,a1[11000],a2[11000],a3[11000],ma;
8 while (cin>>n>>m>>k)
9 {
10 if (n==0&&m==0&&k==0)
11 break;
12 memset(a1,0,sizeof(a1));
13 memset(a2,0,sizeof(a1));
14 memset(a3,0,sizeof(a1));
15 for (int i=0;i<=n;i++)
16 a1[i]=1;
17
18 for (int j=0;j<=n;j++)
19 for (int i=0;i<=2*m;i+=2)
20 a2[j+i]+=a1[j];
21
22 for (int i=0;i<=n+2*m;i++)
23 for (int j=0;j<=k*5;j+=5)
24 a3[i+j]+=a2[i];
25
26 int t=0;
27 for (int i=0;i<=1100;i++)
28 {
29 if (a3[i]==0)
30 {
31 t=1;
32 cout <<i<<endl;
33 break;
34 }
35 }
36 if (t==0)
37 {
38 cout <<n+2*m+5*k+1<<endl;//这个地方要注意,所有的都有那就是n+2*m+5*k+1最小。
39 }
40 }
41 return 0;
42 }
hdu 1085 Holding Bin-Laden Captive!
标签:
原文地址:http://www.cnblogs.com/arno-my-boke/p/4278272.html