博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1171 Big Event in HDU(DP)
阅读量:5221 次
发布时间:2019-06-14

本文共 1191 字,大约阅读时间需要 3 分钟。

题意 : 给你一个n,然后n组数据,每组两个数字,一个是物品的价值,另外一个是物品的数量,让你尽量将这些东西分成价值相等的两份,如果无法相等就前一份要大于后一份。

思路 :这个题可以转化成01背包的放与不放的问题,就是该题中最后一句要注意到是一个负数终结输出而非-1 ,就因为我没发现WA了8次。。。。真是郁闷了。

#include 
#include
#include
#include
#include
using namespace std ;struct node{ int value ; int num ;}map[55] ;int dp[251000] ;int main(){ int n ; while(~scanf("%d",&n) && n >= 0) { int sum = 0 ; for(int i = 0 ; i < n ; i++) { scanf("%d %d",&map[i].value,&map[i].num) ; sum += map[i].value * map[i].num ; } int mid = sum >> 1 ; memset(dp,0,sizeof(dp)) ; for(int i = 0 ; i < n ; i ++) { for(int j = 0 ; j < map[i].num ; j++) { for(int k = mid ; k >= map[i].value ; k--) { if(dp[k] < dp[k-map[i].value]+map[i].value) dp[k] = dp[k-map[i].value]+map[i].value ; } } } printf("%d %d\n",sum-dp[mid],dp[mid]) ; } return 0 ;}
View Code

 

转载于:https://www.cnblogs.com/luyingfeng/p/3601321.html

你可能感兴趣的文章
刘波对大一的寄语
查看>>
【大数据学习】-Hadoop的版本(转)
查看>>
dev 数据加载等待提示框控件
查看>>
(ZT)杜君立:紧箍咒与纸枷锁
查看>>
运用starling开发的手游FlappyBird
查看>>
线程同步——用户模式下线程同步——Interlocked实现线程同步
查看>>
苹果开发者账号那些事儿(二)
查看>>
鲜贝7.3--mysql 下载小问题
查看>>
[luogu2576 SCOI2010] 幸运数字 (容斥原理)
查看>>
修炼内功--动态代理
查看>>
ASP.NET打包生成zip压缩文件
查看>>
机器学习算法(5):卷积神经网络原理及其keras实现
查看>>
团队冲刺计划第十天
查看>>
linux下gcc编译多个源文件、gdb的使用方法(转)
查看>>
python学习之路---编程风格规范
查看>>
git reflog查看所有操作记录
查看>>
2016百度编程题:裁减网格纸
查看>>
sqlserver 小计合计总计
查看>>
git pull和git fetch的区别
查看>>
动手动脑5
查看>>