UVA 562 Dividing coins
2014-11-11 10:37
363 查看
01背包。
题意是说要把一堆钱分给两个人,尽可能的平均。要求最终两人的差最小。
01背包,查看某个价值是否可能达到。能就1,不能就0.
题意是说要把一堆钱分给两个人,尽可能的平均。要求最终两人的差最小。
01背包,查看某个价值是否可能达到。能就1,不能就0.
#include<cstdio> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<map> #include<stack> #include<iostream> #include<list> #include<set> #include<vector> #include<cmath> #define INF 0x7fffffff #define eps 1e-8 #define LL long long #define PI 3.141592654 #define CLR(a,b) memset(a,b,sizeof(a)) #define FOR(i,a,b) for(int i=a;i<b;i++) #define FOR_(i,a,b) for(int i=a;i>=b;i--) #define rep(i,a,b) for(int i=a ; b>a?i<b:i>=b ; b>a? i++:i--) #define pb push_back #define mp make_pair #define ft first #define sd second #define sf scanf #define pf printf #define sz(v) ((int)(v).size()) #define all(v) (v).begin(),(v).end() #define acfun std::ios::sync_with_stdio(false) #define SIZE 100 +1 using namespace std; int n,m; int c[SIZE]; bool dp[50001]; int zeroonepack(int cost) { FOR_(i,m,cost) { if(dp[i-cost]==1) dp[i]=1; } } int main() { int t; sf("%d",&t); while(t--) { sf("%d",&n); m=0; CLR(dp,0); dp[0]=1; FOR(i,0,n) { sf("%d",&c[i]); m+=c[i]; } FOR(i,0,n) zeroonepack(c[i]); // FOR(i,0,m+1) // pf("%d=%d=\n",i,dp[i]); // system("pause"); int ans=m>>1; while(dp[ans]==0)ans--; pf("%d\n",m-ans*2); } }
相关文章推荐
- uva 562 Dividing Coins
- uva 562 - Dividing coins(注意判断条件,可以转换成01背包做)
- UVa 562 - Dividing coins
- UVA 562 Dividing coins
- uva 562 Dividing coins
- UVA 562 Dividing coins
- UVA - 562 Dividing coins 经典01背包
- UVa 562 - Dividing coins
- UVA 562 Dividing coins
- Uva-562- Dividing coins
- uva_562 Dividing coins
- uva 562 Dividing coins
- UVA 562 - Dividing coins
- UVALive5583 UVA562 Dividing coins【0/1背包+DP】
- uva 562 Dividing coins
- UVA 562 Dividing coins 01背包 Commencel
- uva 562 Dividing coins
- UVA 562 Dividing coins
- UVa 562 - Dividing coins
- uva 562 - Dividing coins