hdu 2110 Crisis of HDU

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




Problem Description
話說上回講到HDU大戰東洋小苟,結果自然是中方大勝,這一戰也使得海東集團在全球同行業中的地位更加鞏固。隨着集團的發展,很多創業時期的元老逐步功成身退,先是8600移民海外,然後是linle夫婦退隱山林,逐漸的,最初衆多的元老只剩下XHD夫婦和Wiskey三人了。
到了2020年,因爲擴張過度加上老鼠數量逐年減少,公司的發展遇到了前所未有的危機,此時集團已經沒有任何流動資金,更可怕的是,這個時候,wiskey也決定退出了!
退出本身並不麻煩,麻煩的是,退出的人需要取走相應比例(1/3)金額的資產。
假設公司此時一共有n種價值的資產,每種價值的資產數量已知,請幫助心煩意亂的XHD夫婦計算一共有多少種分割資產的方法。
 

Input
輸入包含多個測試實例,每個實例的第一行是一個整數n(n<100),表示一共有n種價值的資產,接着的n行每行包含兩個整數pi和mi(0<pi,mi<10),分別表示某種價值和對應的數量,n爲0的時候結束輸入。
 

Output
對於每個測試實例,請輸出分割資產的方案數%10000,如果不能分割,請輸出“sorry”,每個實例的輸出佔一行。
 

Sample Input
2 1 1 2 1 0
 

Sample Output
1 面對朋友的退出和資金短缺,海東集團能度過難關嗎?作爲老總的XHD如何來化解這場危機?欲知後事如何,且聽下回分解——
 





#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
	int a[110],b[110],dp[10010],i,j,k,n;
	while(scanf("%d",&n),n)
	{
		int sum=0;
		for(i=1;i<=n;i++)
		{
			scanf("%d%d",a+i,b+i);
			sum+=a[i]*b[i];
		}
		memset(dp,0,sizeof(dp));
		if(sum%3!=0)
		{
			cout<<"sorry"<<endl;
			continue;
		}
		dp[0]=1;
		for(i=1;i<=n;i++)
		{
			for(j=sum/3;j>=1;j--)
			{
				for(k=1;k<=b[i];k++)
				 if(j>=k*a[i])
				  dp[j]=(dp[j]+dp[j-k*a[i]])%10000;
			}
		}	
		if(dp[sum/3]==0)
		{
			cout<<"sorry"<<endl;
		}
		else
		{
			cout<<dp[sum/3]<<endl;
		}
	}
	return 0;
}



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