标签:
http://acm.hdu.edu.cn/showproblem.php?pid=5241
并不太懂,看了题解才知道:留意到,每一种语言的情况其实是独立的,也就是说,每一种语言的集合的包含的情况都是符合要求的。一种语言在图上可以有32种情况(由数据2知),所以,总的数就是32^n;n为语言的个数,本题可以用Java水过,但本人也不会Java。此题主要是想不到是32^n,剩下的就好写了。以下代码借鉴了江锦的。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<string> 5 #include<cstring> 6 #include<cmath> 7 using namespace std; 8 int cc[3005][6005] ; 9 int main() 10 { 11 int t,i,j,n,k,cas; 12 scanf("%d",&t); 13 memset(cc,0,sizeof(0)); 14 cc[1][0] = 2; 15 cc[1][1] = 3; 16 for(i=2; i<=3000; i++) 17 { 18 for(k=0; k<2; k++) 19 { 20 for(j=0; j<=6000; j++) 21 { 22 cc[i][j+k]+=cc[1][k]*cc[i-1][j] ; 23 } 24 } 25 for(j=0; j<=6000; j++) 26 { 27 cc[i][j+1]+=cc[i][j]/10; 28 cc[i][j]%=10; 29 } 30 } 31 cas=1; 32 while(t--) 33 { 34 scanf("%d",&n) ; 35 printf("Case #%d: ",cas++) ; 36 if(!n)printf("1\n"); 37 for(i=6000; i>=0; i--) 38 { 39 if(cc[n][i]) 40 { 41 for(j=i; j>=0; j--) 42 { 43 printf("%d",cc[n][j]) ; 44 } 45 printf("\n") ; 46 break; 47 } 48 } 49 } 50 return 0 ; 51 }
标签:
原文地址:http://www.cnblogs.com/acm31415/p/4787076.html