UVa 562: Dividing Coins
来源:互联网 发布:fifa3数据库 编辑:程序博客网 时间:2024/04/29 11:59
题意:给一串数字作为硬币的币值,将这些硬币分给两个人A和B,要求越平均越好。
假设总钱数为Sum且A分得的钱不超过B,开数组dp,dp[i]表示A是否可以分得一些硬币使得其总钱数为i,dp[i]为1表示可以,0表示不可以。
dp数组初始化为0,dp[0]=1。然后分别对M个硬币枚举,判断dp是否可置为1即可。最后选择离Sum/2最近且dp[i]==1的i即可。
我的解题代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>using namespace std;#define min(a,b) (a<b?a:b);#define maxn 100#define INF 50000 //可以优化:#define INF 25000int Coin[maxn];int dp[INF+5];int main(){int N,M,Sum;cin >> N;while(N--){cin >> M;Sum = 0;for(int i=0; i<M; i++) { cin >> Coin[i]; Sum += Coin[i]; }memset(dp,0,sizeof(dp));dp[0] = 1;for(int i=0; i<M; i++){for(int j=Sum-Coin[i]; j>=0; j--) //可以优化:for(int j=Sum/2-Coin[i]; j>=0; j--) 因为我们最后只要比Sum/2小的i值{if(dp[j]) dp[j+Coin[i]] = 1;}}for(int i=Sum/2; i>=0; i--) if(dp[i]){cout << Sum-2*i << endl;break;}}return 0;}
- uva 562 Dividing coins
- uva:562 - Dividing coins
- UVA 562 Dividing coins
- Uva 562 Dividing coins
- UVa 562 - Dividing coins
- UVA 562 Dividing coins
- uva 562 Dividing Coins
- UVa 562 - Dividing coins
- UVa 562 - Dividing coins
- uva 562 - Dividing coins
- uva 562 Dividing coins
- UVa 562 - Dividing coins
- UVa 562 Dividing Coins
- Uva-562- Dividing coins
- UVA 562 Dividing coins
- UVa 562: Dividing Coins
- UVA - 562 Dividing coins
- uva 562 Dividing coins
- 选择排序
- JAVA学习3
- grub重装
- keil中编写arm代码堆栈的设置
- 关于java调用Autoit脚本的问题
- UVa 562: Dividing Coins
- POJ 2531 Network Saboteur
- CentOS──xxx is not in the sudoers file解决方法
- [iOS] Xcode 4 Missing file 警告的解决办法
- LIBTIFF与OpenCV2.3.1在vs2005下编译TIFF出错
- ifconfig之下,dropped包的含义。
- java 中enum的用法
- 关于在android源码编译时引用第三方jar宝--需要在android.mk中配置
- Linux shell笔记