HDU 1171 Big Event in HDU(01背包)
阿新 • • 發佈:2017-12-18
sum tar eof 可能 ret pac include blank http
題目鏈接
題意:給出n個物品的價值v,每個物品有m個,設總價值為sum,求a,b。a+b=sum,且a盡可能接近b,a>=b。
題解:01背包。
#include <bits/stdc++.h> using namespace std; int data[5050],dp[125050],n,v,m; int main() { while(scanf("%d",&n)&&n>0) { memset(dp,0,sizeof(dp)); int sum=0,cnt=0; for(int i=0;i<n;i++) { scanf("%d%d",&v,&m); sum+=v*m; while(m--) data[cnt++]=v; } int k=sum/2; for(int i=0;i<cnt;i++)//註意不是n for(int j=k;j>=data[i];j--) dp[j]=max(dp[j],dp[j-data[i]]+data[i]); printf("%d %d\n",sum-dp[k],dp[k]); } return 0; }
HDU 1171 Big Event in HDU(01背包)