hdu 1171 Big Event in HDU
来源:互联网 发布:cms采集电影采集 编辑:程序博客网 时间:2024/06/04 12:44
跟之前一题很类似,elem[ ]和num[ ] 都由输入给出,可以先求出总价值sum。 再由中间sum/2往两边找,若i和sum-i都有方案数,则为所求。输入后进行其它数组的赋值运算,居然会改变elem[0]的值,真是百思不得其解。
AC代码:
#include<iostream>using namespace std;const int iNum=250005;int c1[iNum],c2[iNum];int elem[55],num[55];int main(){int n,i,j,k,sum;freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);while (cin>>n){if(n<0)break;sum=0;for (i=0;i<=iNum;i++){//c1保存第1个括号,c2总是保存一趟运算的结果(每一对括号合并成一个括号) c1[i]=0;c2[i]=0; } for(i=0;i<n;i++){cin>>elem[i]>>num[i];sum=sum+elem[i]*num[i];}for (i=0;i<=num[0];i++)//此题elem[0]元硬币只有a[0]个c1[i*elem[0]]=1; for (i=1;i<n;i++){//n个括号要进行n-1趟运算for (j=0;j<=sum;j++)//j是第一个括号的指数,虽然第1趟时j<=a[0],但其它趟可能超过,故上限为sum for (k=0;k*elem[i]+j<=sum&&k<=num[i];k++){//k是第i种硬币的个数,k*elem[i]才是第二个括号的指数 c2[j+k*elem[i]]+=c1[j];//第二个括号的系数都是1,隐含了c2[j+k]+=c1[j]*1; } for (j=0;j<=sum;j++){//c1保存第1个括号,要保存成前一趟运算的结果c1[j]=c2[j];c2[j]=0;} } for(i=sum/2;i>=0;i--){if(c1[i]!=0&&c1[sum-i]!=0){printf("%d %d\n",sum-i,i);break;}}}return 0;}
- 1171 Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- 网站改标题 谷歌正常反应百度慢N步
- hdu1013
- 2012年度总结
- 如何让linux内核make uImage时Entry Point(入口地址)自动偏移64个字节
- 设计模式之模板方法模式
- hdu 1171 Big Event in HDU
- cassandra snitch (version 1.2)
- hdu 2059
- 欧冠赛-C罗破门皇马主场1-1平曼联
- linux查看cpu颗数、核数及是否超线程
- 如何在ANDROID JNI 的C++中打Log
- 春节魅影 yeah
- //九度OJ教程98 动态规划之LCS(最长公共子序列)
- 2013寒假练习 1049 Relatives