hdu2110(普通母函数)
Crisis of HDU
?
Time Limit: 3000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6377????Accepted Submission(s): 1954
?
?
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
?
解析:起先是沒想到只是為了分割資金給wiskey而沒有除3,結果一直不正常。題意是要分割資金給一個人所以要除3,就是求能g夠組成總資金的1/3的組合數。思路很簡單,直接上母函數模板
#include<bits/stdc++.h> using namespace std;int n,a[105],b[105],m,s[10010],t[10010]; int main() {while(~scanf("%d",&n),n){m=0;for(int i=0; i<n; i++){scanf("%d%d",&a[i],&b[i]);m+=(a[i]*b[i]);}if(m%3!=0){printf("sorry\n");continue;}memset(s,0,sizeof(s));memset(t,0,sizeof(t));m/=3;for(int i=0; i<=b[0]&&i*a[0]<=m; i++){s[i*a[0]]=1;}for(int i=1; i<n; i++){for(int j=0; j<=m; j++)for(int k=0; k<=b[i]&&k*a[i]+j<=m; k++){t[k*a[i]+j]+=s[j];t[k*a[i]+j]%=10000;}for(int j=0; j<=m; j++){s[j]=t[j];t[j]=0;}}if(s[m]!=0){printf("%d\n",s[m]);}else printf("sorry\n");}return 0; }?
總結
以上是生活随笔為你收集整理的hdu2110(普通母函数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拓扑排序简单理解
- 下一篇: ElasticSearch之Tokeni