HDOJ 1171 Big Event in HDU解题报告
2011-07-31 22:43
483 查看
//错误的解答 //#include <fstream> #include <iostream> using namespace std; bool money[250002]; unsigned value[52]; unsigned number[52]; int main() { //fstream 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]; } int half=sum/2; memset(money,0,sizeof(money)); 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,s=0;s<=number[i];k+=value[i],s++) if(money[j]) money[k+j]=true;//第二个循环内改变会影响后面的j值变化后的对money数据的使用 len+=number[i]*value[i]; } while(half) { if(money[half]) { cout<<sum-half<<" "<<half<<endl; break; } half--; } } return 0; }
//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; }
总结与教训:
1、不是什么样的变形都不影响算法,吃一堑长一智,理解也更深一层,也算是好处多多吧~
2、根据母函数,①处循环的长度应当是随着所乘数的次方中未知量的最大值而不断变化的,但是很遗憾网上很多都是不变的,无法理解。
相关文章推荐
- HDOJ-1171-Big Event in HDU 解题报告
- 杭电ACM hdu 1171 Big Event in HDU 解题报告(母函数)
- 1171 Big Event in hdu 解题报告
- [HDOJ 1171] Big Event in HDU 【完全背包】
- HDOJ 1171 Big Event in HDU
- HDOJ 1171 Big Event in HDU(二进制拆分+0 1背包)
- hdoj 1171 Big Event in HDU(背包dp+母函数)
- HDU/HDOJ 1171 Big Event in HDU 01背包、多重背包、母函数
- 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(多重背包/母函数)
- HDOJ1171 Big Event in HDU
- Big Event in HDU 【HDOJ-1171-母函数】
- 【hdoj1171】Big Event in HDU(01背包)
- HDOJ 1171 Big Event in HDU
- 【HDOJ】1171 Big Event in HDU
- HDOJ 1171 Big Event in HDU(01背包)
- HDOJ&nbsp;&nbsp;1171&nbsp;&nbsp;&nbsp;Big&nbsp;Event&nbsp;in&nbsp;HDU