hdu 1171 Big Event in HDU (母函数)
题意:
给出n物品,每个物品有两个参数,价值v,数目m 求,将这些物品分成两份,这两份的价值差值最小。
母函数求解,注意初始化的不同
#include<stdio.h> #include<string.h> int v[55],num[55]; int a[300000],b[200000]; int main() { int n,i,j,k; while(scanf("%d",&n)!=EOF) { if(n<0)break; int sum=0; for(i=1;i<=n;i++) { scanf("%d%d",&v[i],&num[i]); sum+=v[i]*num[i]; } int d=(sum+1)/2; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(i=0;i<=num[1]*v[1];i+=v[1]) { a[i]=1; } int h=num[1]*v[1]; for(i=2;i<=n;i++) { for(j=0;j<=h;j++) { for(k=0;k<=num[i]*v[i];k+=v[i]) { b[k+j]+=a[j]; } } h+=num[i]*v[i]; for(j=0;j<=h;j++) { a[j]=b[j]; b[j]=0; } } if(a[d]!=0) { printf("%d %d\n",d,sum-d); } else { for(i=d;i<=sum;i++) { if(a[i]!=0)break; } printf("%d %d\n",i,sum-i); } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步