hdu 2080 找單詞

http://acm.hdu.edu.cn/showproblem.php?pid=2082


Problem Description
假設有x1個字母A, x2個字母B,..... x26個字母Z,同時假設字母A的價值爲1,字母B的價值爲2,..... 字母Z的價值爲26。那麼,對於給定的字母,可以找到多少價值<=50的單詞呢?單詞的價值就是組成一個單詞的所有字母的價值之和,比如,單詞ACM的價值是1+3+14=18,單詞HDU的價值是8+4+21=33。(組成的單詞與排列順序無關,比如ACM與CMA認爲是同一個單詞)。
 

Input
輸入首先是一個整數N,代表測試實例的個數。
然後包括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
 


# include <stdio.h>
# include <string.h>
int main()
{
	int i,j,k,n,sum,num[27],s[27][51];
	scanf("%d",&n);
	while(n--)
	{
		memset(s,0,sizeof(s));
		for(i=1;i<=26;i++)	scanf("%d",&num[i]);
	
		for(i=0;i<=26;i++)  s[i][0]=1;
		
		for(i=1;i<=26;i++)
		{
			for(j=1;j<=50;j++)
			{
				for(k=0;k<=num[i]&&j-k*i>=0;k++)
				{
						s[i][j]+=s[i-1][j-k*i];
				}
			}
		}
		for(i=1,sum=0;i<=50;i++) sum+=s[26][i];
		printf("%d\n",sum);
	}
	return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章