题目:http://acm.hdu.edu.cn/showproblem.php?pid=3466

题意:假设你有M元,已经Pi,Qi,Vi(i为角标,1<i<N),当M>Qi,时才能购买该商品,得到价值Vi,问得到的最大的价值。

思路:知道是变形的01背包问题,但是思考了很久不知道怎么解决,于是看了好几种不同款式的大佬的代码和证明才看懂,如下是自己写的证明:

如果不改变,直接用01背包的话呢,就是:

for(int i=0;i<n;i++)

for(int j=v;j>=a[i].Q,j--)

dp[i]=max(dp[j],dp[j-a[i].P]+a[i].v);

这个dp使用前是没有对商品排序的,就是商品的购买顺序本该对他没影响,但是在本题中购买a->b,和购买b->a,是不一样的,

假设有两组数据:

2 M

a:P1,Q1,V1

b:P2,Q2,V2

a->b  需要的背包容量:P1+Q2

b->a  需要的背包容量:P2+Q1

自然我们需要剩下背包的容量更大的方案进行购买,及如果a->b,就有:P1+Q2<P2+Q1 移项为 Q1-P1>Q2-P2,也就是说我们每次选择时都希望购买 Q-P更大的商品;

但是对应我们的dp:

for(i = 0;i<n;i++)
for(j = m;j>=a[i].Q;j--)
dp[j] = max(dp[j],dp[j-a[i].P]+a[i].v);

实质是:当满足j>=a[i].Q时,就马上确定购买物品i,然后再用剩下的j-a[i].P去购买最大价值,i的购买顺序是先于j-a[i].P的,所以dp的顺序就希望从Q-P小的先dp,

于是用sort排序,由于默认是升序,但是本题中:

sort(a,a+n)会出错,因为有a.p,a.Q.a.v,a.ca,多个a,会不知道是哪一个a作为首地址,a+n作为尾地址。

于是先写下:

bool cmp(note A,note B)
{
return A.ca < B.ca;
}

sort(a,a+n,cmp)

就知道是a.ca了

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

int dp[5010];

struct note
{
int P,Q,v;
int ca;
} a[510];
bool cmp(note A,note B)
{
return A.ca < B.ca;
}

int main()
{
int n,m,i,j;
while(~scanf("%d%d",&n,&m))
{
for(i = 0;i<n;i++)
{
scanf("%d%d%d",&a[i].P,&a[i].Q,&a[i].v);
a[i].ca = a[i].Q-a[i].P;
}
sort(a,a+n,cmp);
memset(dp,0,sizeof(dp));
for(i = 0;i<n;i++)
for(j = m;j>=a[i].Q;j--)
dp[j] = max(dp[j],dp[j-a[i].P]+a[i].v);
printf("%d\n",dp[m]);
}
}

3466 ACM Proud Merchants 变形的01背包的更多相关文章

  1. HDU 3466 Proud Merchants【贪心 + 01背包】

    Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerfu ...

  2. hdu 3466 Proud Merchants 【限制性01背包】+【贪心】

    题目链接:https://vjudge.net/contest/103424#problem/J 转载于:https://www.bbsmax.com/A/RnJW16GRdq/ 题目大意: 有n个商 ...

  3. [HDOJ3466]Proud Merchants(贪心+01背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3466 n个商人,每个商人有一个物品,物品有价格p.价值v还有一个交易限制q.q的意义是假如你现在拥有的 ...

  4. Proud Merchants HDU - 3466 (思路题--有排序的01背包)

    Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerfu ...

  5. Proud Merchants---hdu3466(有01背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3466 与顺序有关的01背包. 如果一个物品p = 5,q = 7,一个物品p = 5,q = 9,如果 ...

  6. 2955 ACM 杭电 抢银行 01背包 乘法

    题意: 强盗抢银行,在不被抓住的情况下,想尽量多的偷点钱.已知各个银行的金钱和被抓的概率,以及强盗能容忍的最大不被抓的概率(小于等于该概率才能不被抓),求最多能抢到钱? 并不是简单的01背包问题? 1 ...

  7. 杭店 ACM 1864 最大报销额 01背包

    ![勾选C++才能过 题意: 先规定可以报销一定额度的发票,物品类型有A,B,C,三种.要求每张发票总额不得超过1000元,单项物品不得超过600.求报销的最大额 分析: 先找到合格的发票,然后再挑选 ...

  8. ZOJ3211-Dream City(贪心思想+变形的01背包)

    Dream City Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Sta ...

  9. 2602 ACM 杭电 骨头容器 01背包

    题意:装骨头的容器大小固定,有一堆骨头,已知骨头的价值和大小,在不超过容积大小的情况下,问:所装骨头的最大价值? 思路:典型的01背包问题,不需要有任何的变动. 模板: for(int j=v;j&g ...

随机推荐

  1. 在一些开源框架中,dist文件夹是什么意思

    全称是distribution. distribution英 [dɪstrɪ'bjuːʃ(ə)n]美 ['dɪstrə'bjʊʃən]: 发行版 n. 分布:分配 在某些框架中,因为开发和发布是的内容 ...

  2. Pymysql-总结

    背景:工作需要大量链接数据库进行一些操作查询,但是也会有出现异常情况 1.添加字段 1 ALTER TABLE app01_student ADD COLUMN Relation VARCHAR(25 ...

  3. 华为设备默认console密码

    admin@huawei.com Admin@huawei.com Admin@huawei huawei.com huawei@123 huawei Change_Me

  4. python requests 正则爬虫

    代码: import requests from multiprocessing import Pool from requests.exceptions import RequestExceptio ...

  5. WCF与WebService的区别(转)

    1.WebService:严格来说是行业标准,不是技术,使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单 ...

  6. C#矩阵求逆

    来源:http://zhidao.baidu.com/link?url=DiqAbq9YUYn3z7QjxGGoF0PLZwN-Y9ecqKB7Gy38JWRD1riMIYukVKXKq88pxtWL ...

  7. Zookeeper(一)CentOS7.5搭建Zookeeper3.4.12集群与命令行操作

    一. 分布式安装部署 1.0 下载地址 官网首页: https://zookeeper.apache.org/ 下载地址: http://mirror.bit.edu.cn/apache/zookee ...

  8. Kudu之Tablet的发现过程

    当创建Kudu客户端时,其会从主服务器上获取tablet位置信息,然后直接与服务于该tablet的服务器进行交谈.为了优化读取和写入路径,客户端将保留该信息的本地缓存,以防止他们在每个请求时需要查询主 ...

  9. LVM实现逻辑卷镜像

    本文系统 CentOS 6.5 x64 LVM的镜像功能,有点儿类似于Raid1,即多块儿磁盘互相同步,确保资料不会丢失. 1.在此添加4块物理硬盘,每块2G空间 2.将sdb.sdc.sdd.sde ...

  10. BZOJ1497 [NOI2006]最大获利 网络流 最小割 SAP

    原文链接http://www.cnblogs.com/zhouzhendong/p/8371052.html 题目传送门 - BZOJ1497 题意概括 有n个站要被建立. 建立第i个站的花费为pi. ...