hdu_2082_找單詞_201404271536
阿新 • • 發佈:2018-12-31
找單詞
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3711 Accepted Submission(s): 2658
然後包括N行資料,每行包括26個<=20的整數x1,x2,.....x26. Output 對於每個測試例項,請輸出能找到的總價值<=50的單詞數,每個例項的輸出佔一行。 Sample Input 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 2 6 2 10 2 2 5 6 1 0 2 7 0 2 2 7 5 10 6 10 2 10 6 1 9 Sample Output 7 379297 Source
#include <stdio.h> #include<string.h> int c1[60],c2[60]; int main() { int T; scanf("%d",&T); while(T--) { int s[30]; int i,j,k,sum=0; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for(i=1;i<=26;i++) scanf("%d",&s[i]); for(i=0;i<=s[1];i++) c1[i]=1; for(i=2;i<=26;i++) { for(j=0;j<=50;j++) for(k=0;k<=s[i]&&(j+k*i<=50);k++) { c2[j+k*i]+=c1[j]; } for(j=0;j<=50;j++) { c1[j]=c2[j];//printf("%d ",c2[j]); c2[j]=0; } //printf("\n"); } for(i=1;i<=50;i++) sum+=c1[i]; printf("%d\n",sum); } return 0; } //母函式
參考程式碼:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 5 using namespace std; 6 7 const int N=50; 8 9 int c1[N+10],c2[N+10],num[30]; 10 11 int main(){ 12 13 //freopen("input.txt","r",stdin); 14 15 int t; 16 scanf("%d",&t); 17 while(t--){ 18 memset(c1,0,sizeof(c1)); //c1[ ]儲存當前得到的多項式各項係數 19 memset(c2,0,sizeof(c2)); //c2[ ]儲存每次計算時的臨時結果 20 for(int i=1;i<=26;i++) 21 scanf("%d",&num[i]); 22 c1[0]=1; //相當於用X^0去乘以後面的多項式 23 for(int i=1;i<=26;i++){ //要乘以26個多項式 24 for(int j=0;j<=N;j++) //c1的各項的指數 25 for(int k=0;k<=num[i] && j+k*i<=N;k++) //k*i表示被乘多項式各項的指數,(X^0*i + X^1*i + X^2*i + ……) 26 c2[j+k*i]+=c1[j]; //指數相加得j+k*i,加多少隻取決於c1[j]的係數,因為被乘多項式的各項係數均為1 27 for(int j=0;j<=N;j++){ 28 c1[j]=c2[j]; 29 c2[j]=0; 30 } 31 } 32 int ans=0; 33 for(int i=1;i<=N;i++) 34 ans+=c1[i]; 35 printf("%d\n",ans); 36 } 37 return 0; 38 }