到了2020年,因为扩张过度加上老鼠数量逐年减少,公司的发展遇到了前所未有的危机,此时集团已经没有任何流动资金,更可怕的是,这个时候,wiskey也决定退出了!
退出本身并不麻烦,麻烦的是,退出的人需要取走相应比例(1/3)金额的资产。
假设公司此时一共有n种价值的资产,每种价值的资产数量已知,请帮助心烦意乱的XHD夫妇计算一共有多少种分割资产的方法。
2 1 1 2 1 0
1
同样还是母函数,和上一篇非常类似
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int s[10005],ans[10005],tmp[10005],cmax; int num[10005],n; int mu() { memset(ans,0,sizeof(ans)); memset(tmp,0,sizeof(tmp)); ans[0]=1; cmax=0; for(int i=1;i<=n;i++) { cmax+=num[i]*s[i];//更新j当前的最大值 for(int j=0;j<=cmax;j++) for(int k=0;k<=num[i]&&k*s[i]+j<=cmax;k++) { tmp[j+k*s[i]]+=ans[j]; tmp[j+k*s[i]]=tmp[j+k*s[i]]%10000; } memcpy(ans,tmp,sizeof(tmp)); memset(tmp,0,sizeof(tmp)); } return 0; } int main() { while(cin>>n) { if(n==0) break; int sum=0; for(int i=1;i<=n;i++) { scanf("%d%d",&s[i],&num[i]); sum+=s[i]*num[i]; } if(sum%3!=0)//注意如果总额对3取余不等于0则不能分走 cout<<"sorry"<<endl; else { mu(); if(ans[sum/3]!=0) cout<<ans[sum/3]<<endl; else//当ans[sum/3]==0同样是不能分走 cout<<"sorry"<<endl; } } return 0; }