P5662 纪念品
P5662 纪念品
题解
拿到题目想到DP,但是就是不知道咋写
后来证实这是个背包DP(最近整理背包白整了
我们观察这道题目的特殊之处:

也就是说,对于手中的物品,我们可以今天买了然后明天早上接着卖出去,当然如果你想一直持有物品的话还可以明天接着再买回来,这样我们在每天进行决策的时候就不用考虑手中持有物品了,因为你手里都是钱,这和第一天情况类似嘛不
然后每一天都是一个新的开始,相似于前一天,然后我们仍然可以按照前一天的做法处理今天,今天也就是你有n个物品,每个物品可以买多个,然后考虑明天早上把它们全部卖出最多可以得到多少钱,然后用明天早上卖出的钱作为新的资本来进行明天的决策
于是我们可以想到完全背包
dp [ i ][ j ][ k ] 到了第 i 天,第 j 个物品,手中还剩下 k 元钱,明天早上把手中的物品全部卖出可以得到的最大利润
dp [ i ][ j ][ k ] = max ( dp [ i ][ j ][ k ] , dp [ i ][ j-1 ][ k - p[ i ][ j ] + p[ i+1 ][ j ] - p[ i ][ j ] )
然后降一维 dp [ k ]
dp [ k ] = max ( dp [ k ] , dp [ k - p[ i ][ j ] ] + p[ i+1 ][ j ] - p[ i ][ j ] )
我们选取今天的最大利润加上今天的原资本(当然如果今天全赔本肯定就是直接选取原资本作为下一天开始的资本),作为下一天开始的资本
注意 dp 数组设置的是利润,所以每次开始新的一天都要清零 dp 数组
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<queue> using namespace std; typedef long long ll; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} int t,n,m,ans=;
int p[][];
int dp[]; int main()
{
t=read();n=read();m=read();
for(int i=;i<=t;i++)
for(int j=;j<=n;j++)
p[i][j]=read();
ans=m;
for(int i=;i<=t;i++){
memset(dp,,sizeof(dp));
for(int j=;j<=n;j++)
for(int k=p[i][j];k<=m;k++){
dp[k]=max(dp[k],dp[k-p[i][j]]+p[i+][j]-p[i][j]);
}
for(int j=;j<=m;j++) ans=max(ans,dp[j]+m);
m=ans;
}
printf("%d\n",m);
return ;
}
P5662 纪念品的更多相关文章
- 洛谷 P5662 纪念品 & [NOIP2019普及组] (dp,完全背包)
传送门 解题思路 本题首先要明白,在每一天时,最优策略是先进行操作2(卖),再进行操作1(买),才能是利益最大化. 本题很显然当只有两天时,是一个完全背包,就是把当日价钱当做体积,把明日价格和今日价格 ...
- 洛谷 P5662 纪念品
题目传送门 解题思路: 一道DP,完全背包,不过有点不同于模板.因为本题的每件物品可自由在不同的时间买卖,且不同时间价格不同. 这道题的关键在于要明白一个非常傻逼的性质,就是我在某天买了第i个物品,然 ...
- 纪念品分组 2007年NOIP全国联赛普及组
题目描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格 ...
- noip普及组2007 纪念品分组
纪念品分组 描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品, 并且每组 ...
- 纪念品分组(NOIP2007)
纪念品分组(NOIP2007)[题目描述] 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作. 为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把 购来的纪念品根据价格进行分组,但每组最多只 ...
- 洛谷P1094纪念品分组 题解
题目传送门 首先的思路就是贪心.先将所有的纪念品按照价格从低到高进行排序.在分别从左到右.从右到左合并纪念品.如果两端纪念品价格超过了上上限,那么就将较大的那一个纪念品独自放入.否则将两个纪念品一起放 ...
- P1094 纪念品分组
P1094 纪念品分组 题目描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪 ...
- 蓝桥杯 算法训练 ALGO-34 纪念品分组
算法训练 纪念品分组 时间限制:1.0s 内存限制:256.0MB 问题描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值 相对均衡,他要把购 ...
- 4368: [IOI2015]boxes纪念品盒
4368: [IOI2015]boxes纪念品盒 链接 分析 链接 代码 #include<bits/stdc++.h> using namespace std; typedef long ...
随机推荐
- Computer Vision_33_SIFT:Robust scale-invariant feature matching for remote sensing image registration——2009
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- Needham-Schroeder协议的形式化描述语言
1.对TLS1.3协议形式化描述过程 第一步: Needham-Schroeder 过程的分析 常量和变量的定义: /* * Needham-Schroeder过程的形式化描述 */ // THE ...
- HTML中使用图像
插入图像 在页面中插入图像的标记只有一个,就是img标记. 语法为:<img src="图片地址" alt="下载失败时的替换文本" title='提示文 ...
- windows10下安装tensorflow2.0-GPU和Cupy(不用搞CUDA+cudnn)
0.前言 今年暑假买了个1660ti的游戏本学python,后来发现跑一些数据量比较大的代码和深度学习的时候太慢了,遂想装一下GPU版本,看了网上的资料搞了好几天,又是CUDA又是cudnn的,网速慢 ...
- ui自动化测试 SeleniumBase
ui自动化 SeleniumBase SeleniumBase是一个自动化web测试框架,它的设计pyse相似,基于selenium和unittest封装的框架,api多,支持命令行多参数执行 文档地 ...
- 4.BeanFactory和ApplicationContext的区别
ApplicationContext和BeanFactory都是用于加载Bean的, 但是二者之间存在区别, ApplicationContext能够提供更多的扩展功能. 1).BeanFactory ...
- modbus字符串的结束符介绍
Modbus协议是应用于电子控制器上的一种通用语言.通过此协议,控制器相互之间.控制器经由网络(例如以太网)和其它设备之间可以通信.它已经成为一通用工业标准.有了它,不同厂商生产的控制设备可以连成工业 ...
- BUG----spark
我也想说很尴尬, 搞到显现 发现 原来是个版本的bug spark 1.6.0 有个BUG 希望更多人看到 Traceback (most recent call last): File &quo ...
- 题解 [51nod1753] 相似子串
题解 [51nod1753] 相似子串 题面 解析 先考虑相等的时候怎么办, 我们考虑求出每个字母的贡献,这样字母相等的问题就可以用并查集来解决. 具体来说,我们先对于每个字母,把S中等于它的标为1, ...
- 块状链表 bzoj 3343教主的魔法
//块状链表//分块排序,然后每次查找时在暴力查找头和尾两个块.//中间那些块,因为有序所以只需2分查找即可.我用的是lower_pound();//插入是,也是头和尾暴力插入,中间那些加到一个累计里 ...
