Luogu P2079 烛光晚餐(背包)
题意
题目背景
小明准备请小红去一家咖啡厅,共进烛光晚餐。小红高兴地和他一起去了咖啡厅。
题目描述
小红说:“小明,你点菜吧。”小明看到菜单上有\(N\)道菜,每道菜的价格是\(C_i\)。小明对每道菜的喜爱程度是\(X_i\),小红对每道菜的喜爱程度是\(Y_i\)。(喜爱程度可能为负数)(小明:以我对她的了解,我给你的数据不会错的)
小明带了\(V\)元钱,他点的菜的总价格不能超过\(V\)(小明:当然得我请客啦,显得我大方。)
小明希望让小红吃得开心,所以当然要让她的总喜爱程度尽量大。当然,小明也要考虑自己的感受,点的所有菜的总喜爱程度需要大于等于\(0\)。(小明:要是我吃得不好,她看见我会难过的)
请你帮小明写一个程序,计算出他的总喜爱程度大于等于\(0\)的前提下,小红的喜爱程度的最大值。(小明:你的程序一定要靠谱啊,我得给她一个好印象)
输入输出格式
输入格式:
第\(1\)行,两个正整数\(N,V\)。
之后\(N\)行,每行\(3\)个空格隔开的正整数\(C_i\),整数\(X_i,Y_i\)。
输出格式:
一行,一个正整数,表示他的总喜爱程度大于等于\(0\)的前提下,小红的喜爱程度的最大值。如果这个最大值小于\(0\),输出\(-1\)。
输入输出样例
输入样例#1:
4 10
5 -1 3
2 2 2
11 -5 100
3 -3 10
输出样例#1:
5
说明
对于\(10\%\)数据,\(N<=10,V<=50\)。
对于\(30\%\)数据,\(X_i,Y_i\geq 0\)。
对于全部数据,\(N\leq 100,V\leq 500,|X_i|\leq 5,|Y_i|\leq 1000\)。
思路
负数域下的背包问题。定义\(dp[i][j]\)为花费为\(i\),小明喜爱程度为\(j\)时小红的最大喜爱程度。直接转移就好啦。
\]
因为\(j-x\)可能是负数,所以数组要开到负数域上,这样宏定义一下就好啦:
#define f(a,b) dp[a][b+500]
然后转移时直接用\(f\),就是简单的背包问题了。
AC代码
#include<bits/stdc++.h>
using namespace std;
int n,v,dp[505][1005],ans=-1;
#define f(a,b) dp[a][b+500]
int read()
{
bool f=true;int re=0;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=false;ch=getchar();}
while(isdigit(ch)) re=(re<<3)+(re<<1)+ch-'0',ch=getchar();
return f?re:-re;
}
int main()
{
n=read(),v=read();
memset(dp,0xcf,sizeof dp);
f(0,0)=0;
for(int i=1;i<=n;i++)
{
int x=read(),y=read(),z=read();
for(int j=v;j>=x;j--)
for(int k=500;k>=-500;k--)
if(k-y>=-500&&k-y<=500)
f(j,k)=max(f(j,k),f(j-x,k-y)+z);
}
for(int i=0;i<=v;i++)
for(int j=0;j<=500;j++)
ans=max(ans,f(i,j));
printf("%d",ans);
return 0;
}
Luogu P2079 烛光晚餐(背包)的更多相关文章
- luogu 2014 选课 树上背包
树上背包 #include<bits/stdc++.h> using namespace std; ; const int inf=0x3f3f3f3f; vector<int> ...
- luogu P2066 机器分配[背包dp+方案输出]
题目背景 无 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15 ...
- LUOGU P5061 秘密任务(背包+二分图染色)
传送门 解题思路 \(orz\)出题人的神仙做法.本蒟蒻看不懂,就水个求补图再二分图染色的方法来\(%1%\)出题人. 首先我们对图中\(m\)个关系连边,发现这样是没法做的,因为我们最后要关注的是谁 ...
- luogu P1858 多人背包
嘟嘟嘟 既然让求前\(k\)优解,那么就多加一维,\(dp[j][k]\)表示体积为\(j\)的第\(k\)优解是啥(\(i\)一维已经优化掉了). 考虑原来的转移方程:dp[j] = max(dp[ ...
- <转>好婚姻是彼此放心
-01- 临下班,马丽听到隔壁桌的方雅在打电话,声音听起来嗲声嗲气:“有个朋友晚上约我吃饭,要晚点回来,你不用等我了哦.” 电话挂断时,已经到了下班的点.方雅扭头对马丽说:“丽姐,待会我们一起去吃个饭 ...
- 【管理心得之三十二】PMP杂谈---------爱情必胜术
这次一反常态,没有场景设计,我想借此文普及一下PMP是什么? 但我不知道这样枯燥的话题能否能引起你的兴趣,我不得不套用“标题党”<爱情必胜术>来博你眼球. 我真没有说谎,此文是献给那些孤身 ...
- 蓝牙4.0LED灯控方案
一.LED照明机遇 相对传统光源产品,LED灯凭借其光效高.寿命长.不含汞.总拥有成本低等优势,已被普遍认为是一种革命性和替代性的技术.随着全球白炽灯禁产.禁用政策的依次落实,白炽灯将逐渐消失于市场. ...
- English常用短语
(1) be waken by 被什么吵醒 (2) wake up ! 快醒醒 (3) put the flames /fleimz/ ...
- python 22 类与对象
目录 1. 从空间角度研究类 1.1 添加对象的属性: 1.2 添加类的属性: 1.3 类与对象的关系: 2. 类与类直接的关系 2.1 类与类的关系: 2.2 依赖关系 -- 主从之分 2.3 组合 ...
随机推荐
- Portainer Exec Container 失败解决方案
近日,将portainer服务挂了个域名,然后用Nginx代理的时候发现不能attach容器了,经过搜索在issue 找到解决方案 1.修改Nginx config server { listen 8 ...
- 简介Python正则表达式
一.概念 简单来说正则表达式是由一些普通字符(例如,a 到 z 之间的字母)和一些元字符组成,用来匹配和过滤一些字符串的一种逻辑公式. 二.正则表达式的一些基本规则 1.一些常用的元字符 ^ : ...
- 20140319 const sizeof define 编译时分配内存
1.面试宝典预处理,const,sizeof Define作用定义函数: //用一个宏定义FIND求一个结构体struc里某个变量相对于struc的偏移量,如FIND(student,a)//等于0 ...
- SpringBoot-集成PageHelper5.1.2踩坑
背景就不介绍了,项目是SpringBoot+MyBatis搭建的,需要集成git上的PageHelper5.1.2,这个插件大家都比较熟悉了 之前一直用的PageHelper4.0.3,集成是这样的: ...
- HTML和CSS标签命名规则
1.Images 存放一些网站常用的图片: 2.Css 存放一些CSS文件: 3.Flash 存放一些Flash文件: 4.PSD 存放一些PSD源文件: 5.Temp 存放所有临时图片和其它文件: ...
- 将excel表格或csv转换为Shapefile文件
读取csv转为shp 构造读取csv函数 def read_csv(fp): ret = [] with open(fp, 'rb') as f: for line in f: ret.append( ...
- HDU 2167 状压dp方格取数
题意:给出一个数表,规定取出一个数后周围的八个数都不可取,求可获得的最大数字和 思路:状态压缩dp,每一行的取数方法为状态,显然,由于取数规则的限制,可取的状态并不是 1<<size_co ...
- NPE问题
“防止 NPE,是程序员的基本修养.”NPE(Null Pointer Exception) 参考: https://www.jianshu.com/p/9915f2e34a13
- websokect的原理
WebSocket 机制 以下简要介绍一下WebSocket的原理及运行机制. WebSocket是HTML5下一种新的协议.它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通 ...
- css 内容溢出显示垂直滚动条,内容不超出就不显示滚动条
搬运自:https://www.cnblogs.com/wangyuanyuanlovexuanxuan/p/7767767.html html: <style> .div1{ width ...