HDU3466-Proud Merchants(01背包变形)
需要排序的01背包。
这种题排序时只需要考虑两个怎么排,重载小于号就可以了。
需要注意的是,如果一个物品你想先放进背包里,那么你排序是要放到后面!01背包的放置顺序的倒着的!
看到别人的博客都只是比较了q-p,表示不解,但是都能AC。。。是谁错了呢?或者我这种表达式可以化成那个样子?
AC代码:
#include <iostream>
#include <cstring>
#include <algorithm> using namespace std; // (1 ≤ N ≤ 500, 1 ≤ M ≤ 5000), (1 ≤ Pi ≤ Qi ≤ 100, 1 ≤ Vi ≤ 1000), int p[505], q[505], v[505];
int dp[5005]; /**
n个物品,有qi的钱才能买,需要花费pi,价值vi,求最大价值
直接01背包会出错,需要排序。
排序时考虑其中两个物品i,j
买i,j和买j,i分别需要max(q[i], p[i]+q[j]) max(q[j], p[j]+q[i])
*/ struct node{
int p, q, v;
bool operator < (const node a) const
{
//return q > a.q;
int x = max(q, p + a.q);
int y = max(a.q, a.p + q);
return x > y;
}
} a[505]; int main()
{
int n, m;
while (cin >> n >> m)
{
for (int i = 0; i < n; ++i)
cin >> a[i].p >> a[i].q >> a[i].v;
sort(a, a + n);
memset(dp, 0, sizeof dp);
for (int i = 0; i < n; ++i)
{
for (int j = m; j >= a[i].q; --j)
{
dp[j] = max(dp[j], dp[j - a[i].p] + a[i].v);
}
}
cout << dp[m] << endl;
}
return 0;
}
HDU3466-Proud Merchants(01背包变形)的更多相关文章
- hdu 3466 Proud Merchants 01背包变形
Proud Merchants Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) ...
- Proud Merchants(01背包)
Proud Merchants Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) To ...
- HDU 3466 Proud Merchants(01背包)
题目链接: 传送门 Proud Merchants Time Limit: 1000MS Memory Limit: 65536K Description Recently, iSea wen ...
- FZU 2214 Knapsack problem 01背包变形
题目链接:Knapsack problem 大意:给出T组测试数据,每组给出n个物品和最大容量w.然后依次给出n个物品的价值和体积. 问,最多能盛的物品价值和是多少? 思路:01背包变形,因为w太大, ...
- codeforce Gym 101102A Coins (01背包变形)
01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 【01背包变形】Robberies HDU 2955
http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...
- CF#214 C. Dima and Salad 01背包变形
C. Dima and Salad 题意 有n种水果,第i个水果有一个美味度ai和能量值bi,现在要选择部分水果做沙拉,假如此时选择了m个水果,要保证\(\frac{\sum_{i=1}^ma_i}{ ...
- Proud Merchants(01背包变形)hdu3466
I - Proud Merchants Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- HDU--3466 Proud Merchants (01背包)
题目http://acm.hdu.edu.cn/showproblem.php?pid=3466 分析:这个题目增加了变量q 因此就不能简单是使用01背包了. 网上看到一个证明: 因为如果一个物品是5 ...
随机推荐
- linux系统管理
系统 # uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo ...
- SIAlertView
SIAlertView是AlertView的替代产品 的效果比较多 . 使用实例: SIAlertView *alertView = [[SIAlertView alloc] initWithTitl ...
- App新版本提醒
童鞋们是否遇过在使用app的时候出现有新版本更新跳转到苹果商店的提示呢? github中有一个三方框架 Harpy 完美实现了这一功能! demo时刻 我的github - Harpy
- 搭建 Win CE6.0 设备开发环境
1.操作系统最好基于Windows XP.Vista.Win7 或以上的版本对ActiveSync软件不支持 2.安装VS2008,以及SP1 (一定要装SP1) 3.安装ActiveSync 4. ...
- Highcharts资料
对应的API: http://api.hcharts.cn/#chart.events 对应的中文网实例:http://www.hcharts.cn/demo/highcharts/dynamic ...
- oracle dblink 配置两个ip
create database link test_link connect to xx identified by xx using '(DESCRIPTION = (ADDRESS_LIST = ...
- SecureCRT+WinSCP 共用 key pub 密钥 转换 ppk 登录ssh
使用SecureCRT生成的密钥,无法在WinSCP使用, 使用puttygen.exe无法直接转换,解决办法 1.使用大于等于SecureCRT6.5版本,来转换 记得放入私钥,不是pub公钥.然后 ...
- ubuntu下的翻译软件goldendict
转自ubuntu下的翻译软件 看着一些API虽然能看懂一个大概,但总想知道每个单词的意思.问题是英语水平有限,所以只能来找一些翻译软件,像windows下来用的有道估计是不行了(也没去试到定行不行), ...
- php截取小时和分钟,在进行和其它时间段的比较
用php截取时间的小时和分钟,然后判断这个时间是不是在 8:00到11:30之间,用php应该怎么写? date_default_timezone_set("Asia/Shanghai&qu ...
- (?m)
centos6.5:/root/sbin#cat -n vv 1 192.168.11.186,192.168.11.187 35199,3306 Dec 7, 2016 11:40:02.75052 ...