HDU 1028
Ignatius and the Princess III
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13840 Accepted Submission(s): 9757
"The second problem is, given an positive integer N, we define an equation like this: N=a[1]+a[2]+a[3]+...+a[m]; a[i]>0,1<=m<=N; My question is how many different equations you can find for a given N. For example, assume N is 4, we can find: 4 = 4; 4 = 3 + 1; 4 = 2 + 2; 4 = 2 + 1 + 1; 4 = 1 + 1 + 1 + 1; so the result is 5 when N is 4. Note that "4 = 3 + 1" and "4 = 1 + 3" is the same in this problem. Now, you do it!"
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 10000 int n; int c1[N]; int c2[N]; int main() { int i,j,k; while(scanf("%d",&n)!=EOF) { for(i=0;i<=n;i++) { c1[i]=1; c2[i]=0; } for(k=2;k<=n;k++) { for(i=0;i<=n;i++) for(j=0;i+j<=n;j+=k) c2[i+j]+=c1[i]; for(i=0;i<=n;i++) { c1[i]=c2[i]; c2[i]=0; } } cout<<c1[n]<<endl; } return 0; }
HDU 1085
Holding Bin-Laden Captive!
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15692 Accepted Submission(s): 7019
![](https://i-blog.csdnimg.cn/blog_migrate/b858f96d99fe58f794dd2613cb15429b.jpeg)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 1001000 int c1[N]; int c2[N]; int main() { int top,i,j,a,b,c; while(scanf("%d%d%d",&a,&b,&c),a||b||c) { top=a+b*2+c*5; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for(i=0;i<=a;i++) //第一项 { if(i<=a) c1[i]=1; } for(i=0;i<=top;i++) //第二项 { for(j=0;j<=b*2;j+=2) { c2[i+j]+=c1[i]; } } for(i=0;i<=top;i++) { c1[i]=c2[i]; c2[i]=0; } for(i=0;i<=top;i++) //第三项 { for(j=0;j<=c*5;j+=5) { c2[i+j]+=c1[i]; } } for(i=0;i<=top+1;i++) { if(!c2[i]) { cout<<i<<endl; break; } } } return 0; }
HDU 1398
Square Coins
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8706 Accepted Submission(s): 5923
ten 1-credit coins, one 4-credit coin and six 1-credit coins, two 4-credit coins and two 1-credit coins, and one 9-credit coin and one 1-credit coin.
Your mission is to count the number of ways to pay a given amount using coins of Silverland.
我擦、被坑了、题目叙述有问题,是no more than 300 ,不是less than 300
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 301 int c1[N],c2[N]; int sqare[]={0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289}; int main() { int i,j,k; for(i=0;i<N;i++) { c1[i]=1; c2[i]=0; } for(k=2;k<=17;k++) { for(i=0;i<N;i++) { for(j=0;i+j<N;j+=sqare[k]) { c2[i+j]+=c1[i]; } } for(i=0;i<N;i++) { c1[i]=c2[i]; c2[i]=0; } } int n; while(scanf("%d",&n) && n) { cout<<c1[n]<<endl; } return 0; }
HDU 2079
选课时间(题目已修改,注意读题)
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3052 Accepted Submission(s): 2390
#include <iostream> #include <cstdio> #include <cmath> using namespace std; #define N 42 int n,k; int score[N]; int limit[N]; void cal() { int i,j,kk; int c1[N],c2[N]; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for(j=0;j<=n && j<=score[1]*limit[1];j+=score[1]) { c1[j]=1; } for(i=2;i<=k;i++) { for(j=0;j<=n;j++) { for(kk=0;kk+j<=n && kk<=limit[i]*score[i];kk+=score[i]) { c2[j+kk]+=c1[j]; } } for(j=0;j<=n;j++) { c1[j]=c2[j]; c2[j]=0; } } cout<<c1[n]<<endl; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&k); for(int i=1;i<=k;i++) { scanf("%d%d",&score[i],&limit[i]); } cal(); } return 0; }
HDU 2082
找单词
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4314 Accepted Submission(s): 3102
#include <iostream> #include <cstdio> #include <cmath> using namespace std; #define N 54 int c1[N],c2[N]; int a[N]; int main() { int i,j,k,sum,T; scanf("%d",&T); while(T--) { sum=0; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for(i=1;i<=26;i++) { scanf("%d",&a[i]); } for(i=0;i<=a[1] && i<=50;i++) c1[i]=1; for(i=2;i<=26;i++) { for(j=0;j<=50;j++) for(k=0;k<=a[i]*i && (k+j<=50);k+=i) c2[k+j]+=c1[j]; for(j=0;j<=50;j++) { c1[j]=c2[j]; c2[j]=0; } } for(j=1;j<=50;j++) { sum+=c1[j]; } printf("%d\n",sum); } return 0; }