UVA 562 【DP入门之01背包】
2016-01-27 00:31
246 查看
题意:有一堆硬币,如何平分,可以让两堆硬币的价值之差最小;
刚开始想贪心的,姿势不对,直接WA;
将硬币总和sum求出来,将sum/2当做容器就好,搜索sum/2 ---- > 0 符合条件的;
列举出所有的可能性之和。然后最后就是 差值 Q = sum - 2 * 最大值;
代码如下:
刚开始想贪心的,姿势不对,直接WA;
将硬币总和sum求出来,将sum/2当做容器就好,搜索sum/2 ---- > 0 符合条件的;
列举出所有的可能性之和。然后最后就是 差值 Q = sum - 2 * 最大值;
代码如下:
#include <iostream> #include <string.h> #include <algorithm> #include <cstdio> int a[50000],dp[50000]; int m , sum , t ; using namespace std ; int main() { cin>>t; while(t--) { cin>>m; sum=0; memset(dp,0,sizeof(dp)); for(int i = 0 ; i <m;i++) { cin>>a[i]; sum+=a[i]; } dp[0]=1;//*标记一下 for(int i = 0 ; i < m ;i++) { for(int j = sum;j>=a[i];j--)//*开始列举所有可能的最大值 { if(dp[j-a[i]]) //*累死搜索,看是否已经有过相同的值 { dp[j]=1; } } } int i ; for(i = sum/2;i>=0;i--) //*直接搜最大值出来 { if(dp[i]) break; } printf("%d\n",sum-2*i); } }
相关文章推荐
- Java中httpclient.jar和httpcore.jar版本差异带来的异常
- Unity API
- 序言
- android细节之android.intent.category.DEFAULT的使用
- mysql笔记04 MySQL高级特性
- 纯css3艺术文字样式效果代码
- leetcode198-House Robber
- vi命令详解
- [Data Mining] 文本分词小程序
- Shiro在strust2+spring中的应用
- Ubuntu14.10安装虚拟机后安装package失败
- Cocos2d-Lua 接IOS支付记录
- HDU 2473 - Junk-Mail Filter ,并查集的删点
- stevedore
- 安装好 ubuntu要做的几件事
- 在华信的日子
- golang中设置Host Header的小Tips
- c++库数学函数
- ccessibilityEvent.TYPE_WINDOW_STATE_CHANGED作为监听的原因
- android studio ,Gradle DSL method not found: 'compile()'