Description
到了2020年,因爲擴張過度加上老鼠數量逐年減少,公司的發展遇到了前所未有的危機,此時集團已經沒有任何流動資金,更可怕的是,這個時候,wiskey也決定退出了!
退出本身並不麻煩,麻煩的是,退出的人需要取走相應比例(1/3)金額的資產。
假設公司此時一共有n種價值的資產,每種價值的資產數量已知,請幫助心煩意亂的XHD夫婦計算一共有多少種分割資產的方法。
Input
Output
Sample Input
Sample Output
#include<stdio.h>
#include<string.h>
__int64 sum1[30010],sum2[30020];//注意數組的範圍
__int64 s;
int a;
int n[10010],m[10010];
void suan()
{
__int64 i,j,k;
memset(sum1,0,sizeof(sum1));
memset(sum2,0,sizeof(sum2));//初始化,這樣的方法總比for循環要快,
sum1[0]=1;//接入,保證數組的疊加。
for(i=0;i<a;i++)
{
for(j=0;j<=s;j++)
for(k=0;k<=n[i]&&j+k*m[i]<=s;k++)
{
sum2[j+k*m[i]]+=sum1[j];
sum2[j+k*m[i]]%=10000;//防止得數過大
}
for(j=0;j<=s;j++)
{
sum1[j]=sum2[j];
sum2[j]=0;
}
}
}
int main()
{
int i,j,t;
while(scanf("%d",&a),a)//學到了吧,這樣寫簡單
{
for(i=0;i<a;i++)
{
scanf("%d%d",&m[i],&n[i]);
s=s+m[i]*n[i];
}
if(s%3)
printf("sorry\n");
else
{
s=s/3;
suan();
if(sum1[s]!=0)
printf("%I64d\n",sum1[s]%10000);
else
printf("sorry\n");
}
}
return 0;
}