HDU 1171 Big Event in HDU
来源:互联网 发布:手机制作动漫软件 编辑:程序博客网 时间:2024/06/16 18:00
【题目链接】
http://acm.hdu.edu.cn/showproblem.php?pid=1171
题目意思
题目大意:给你n种价值的东西,每种东西都有m个,问你把这m*n个东西分成两部分,问你怎么分两部分最接近。
解题思路
直接求空间n*m/2的背包最大值就可以了,由于时间给的很多,数值也不大就直接用01背包跑就可以了。
代码部分
#include <bits/stdc++.h>using namespace std;#define LL long longconst int maxn=105;const int INF=0x3f3f3f;int v[maxn];int m[maxn];int dp[250005]; ///背包最优存储int main(){ int n; while(scanf("%d",&n)) { if (n<0) break; memset(dp,0,sizeof(dp)); int temp=0; for (int i=0;i<n;i++) { int v1,m1; scanf("%d %d",&v[i],&m[i]); temp+=v[i]*m[i]; ///求总价值 } for (int i=0;i<n;i++) ///n个种类 { for (int j=temp/2;j>=v[i];j--) ///背包从大到小跟新 { if (dp[j]<dp[j-v[i]]+v[i]) { dp[j]=dp[j-v[i]]+v[i]; //cout<<j<<' '<<dp[j]<<endl; } m[i]--; if (m[i]>0) ///如果多个在让他跑次这个种类 i--; } } printf("%d %d\n",temp-dp[temp/2],dp[temp/2]); }}
阅读全文
0 0
- 1171 Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- Big Event in HDU
- 大小字母的互换
- 指针
- JVM内存分配与回收策略
- RN解决在ScrollView中用多个TextInput两次点击问题
- CRUD-查询-分页
- HDU 1171 Big Event in HDU
- 在Ubuntu中安装LiteIDE
- 魅族利用AIDL进行进程间通信注意事项
- 计算两整数的最大值
- centOS 7.4 安装配置jdk1.8
- Thrift 客户端 C# ---从zookeeper获取服务器信息、实现负载(2)
- #XXXXXX 你调color属性有纠结过吗
- 计算阶梯
- 微服务MySQL分库分表数据到MongoDB同步方案