HDOJ 1171 Big Event in HDU
2011-07-31 22:43
477 查看
不是什么样的变形都不影响算法,吃一堑长一智,理解也更深一层,也算是好处多多吧~。根据母函数,①处循环的长度应当是随着所乘数的次方中未知量的最大值而不断变化的,但是很遗憾网上很多都是不变的,无法理解。
View Code
View Code
//AC版本 //#include <fstream> #include <iostream> using namespace std; bool money[250002]; unsigned value[52]; unsigned number[52]; int main() { //ifstream cin("Big Event in HDU.txt"); int n; while(cin>>n,n>=0) { memset(value,0,sizeof(value)); memset(number,0,sizeof(number)); int sum=0; for(int i=1;i<=n;i++) { cin>>value[i]>>number[i]; sum+=value[i]*number[i]; } memset(money,0,sizeof(money)); bool assistant[250002]; memset(assistant,0,sizeof(assistant)); for(int i=0;i<=number[1]*value[1];i+=value[1]) money[i]=true; int len=number[1]*value[1]; for(unsigned i=2;i<=n;i++) { for(unsigned j=0;j<=len;j++)//① for(unsigned k=0;k<=number[i]*value[i];k+=value[i]) if(money[j]) assistant[k+j]=true; len+=number[i]*value[i];//看了很多网上的代码,第二个循环的长度都没有变化,无法理解。 for(int j=0;j<=len;j++) { money[j]=assistant[j]; assistant[j]=false; } } for(int i=sum/2;i>=0;i--) if(money[i]) { cout<<sum-i<<" "<<i<<endl; break; } } return 0; }
相关文章推荐
- hdoj 1171 Big Event in HDU(背包dp+母函数)
- HDOJ&nbsp;&nbsp;1171&nbsp;&nbsp;&nbsp;Big&nbsp;Event&nbsp;in&nbsp;HDU
- HDOJ-1171 Big Event in HDU
- hdoj 1171 Big Event in HDU(母函数/多重背包)
- HDOJ 1171 Big Event in HDU
- HDOJ1171 Big Event in HDU
- HDOJ 1171 Big Event in HDU(01背包)
- [HDOJ 1171] Big Event in HDU 【完全背包】
- 母函数之Big Event in HDU hdoj 1171
- HDOJ 1171 Big Event in HDU解题报告
- 【hdoj1171】Big Event in HDU(01背包)
- hdoj-【1171 Big Event in HDU】
- HDOJ 1171 Big Event in HDU (多重背包) / (母函数)
- [HDOJ1171]Big Event in HDU(01背包)
- HDOJ--1171--Big Event in HDU
- HDOJ-1171-Big Event in HDU 解题报告
- Big Event in HDU 【HDOJ-1171-母函数】
- hdoj-1171-Big Event in HDU【动态规划】
- HDOJ 1171 Big Event in HDU
- hdoj-1171-Big Event in HDU