hdu 3466 Proud Merchants 自豪的商人(01背包,微变形)

 

题意:

   要买一些东西,每件东西有价格和价值,但是买得到的前提是身上的钱要比该东西价格多出一定的量,否则不卖。给出身上的钱和所有东西的3个属性,求最大总价值。

 

思路:

 

  1)WA思路:与01背包差不多,dp过程中记录每个容量所能获得的最大价值以及剩余的容量。实现是,开个二维dp数组,从左往右扫,考虑背包容量为j的可获得价值量,根据该剩余容量得知要更新后面哪个背包容量[j+?] ,如果剩余容量大于q[i]那么可以直接装进去,更新价值以及剩余容量,否则,考虑更新的是更大的背包容量。这个思路有缺陷,一直找不到。

 

  2)AC思路:先看代码,下面再证明其正确性。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 struct node
 7 {
 8     int p,q,v;
 9 } a[555];
10 
11 int cmp(node x,node y)//按q-p排序,保证差额最小为最优
12 {
13     return x.q-x.p<y.q-y.p;
14 }
15 
16 int main()
17 {
18     int n,m,i,j;
19     int dp[5555];
20     while(~scanf("%d%d",&n,&m))
21     {
22         for(i = 0; i<n; i++)
23             scanf("%d%d%d",&a[i].p,&a[i].q,&a[i].v);
24         memset(dp,0,sizeof(dp));
25 
26         sort(a,a+n,cmp);//关键:q-p 小的在前
27         for(i = 0; i<n; i++)
28         {
29             for(j = m; j>=a[i].q; j--)//注意:剩余的钱大于q才能买
30             {
31                 dp[j] = max(dp[j],dp[j-a[i].p]+a[i].v);
32             }
33         }
34         printf("%d\n",dp[m]);
35     }
36 
37     return 0;
38 }
别人的AC代码

 

证明:

假设有物品1~n,

1)考虑第1件物品:j 的范围在m~q[1],因为有钱q[1]是能买到物品1的最低前提,那么对dp[m~q[1]]进行更新,结果都是v[1],而dp[0~q[1]]都是0(不包括dp[q[1]])。是正确的。

2)考虑第2件物品:因为状态转移公式是 dp[j] = max(dp[j], dp[j-p[i]] + v[i]),所以疑虑在于式子j-p[2]>=q[2]-p[2]是否成立。根据第2个for的限制条件,可知 j-q[2]>=0,两边各减去p[2],那么j-p[2]>=q[2]-p[2],以上式子成立。可知:j-p[1]是能够满足第2件物品的差额要求的。

3)考虑第i件物品,由于1~i-1这些物品都满足限制条件才会购买,那么第i件物品同样和第2件物品一样的证明。

 

转载于:https://www.cnblogs.com/xcw0754/p/4487430.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的影城管理系统,源码+数据库+论文答辩+毕业论文+视频演示 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多生活之中,随之就产生了“小徐影城管理系统”,这样就让小徐影城管理系统更加方便简单。 对于本小徐影城管理系统的设计来说,系统开发主要是采用java语言技术,在整个系统的设计中应用MySQL数据库来完成数据存储,具体根据小徐影城管理系统的现状来进行开发的,具体根据现实的需求来实现小徐影城管理系统网络化的管理,各类信息有序地进行存储,进入小徐影城管理系统页面之后,方可开始操作主控界面,主要功能包括管理员:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理,用户前台;首页、电影信息、电影资讯、个人中心、后台管理、在线客服等功能。 本论文主要讲述了小徐影城管理系统开发背景,该系统它主要是对需求分析和功能需求做了介绍,并且对系统做了详细的测试和总结。具体从业务流程、数据库设计和系统结构等多方面的问题。望能利用先进的计算机技术和网络技术来改变目前的小徐影城管理系统状况,提高管理效率。 关键词:小徐影城管理系统;Spring Boot框架,MySQL数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值