洛谷 P5662 纪念品 & [NOIP2019普及组] (dp,完全背包)
传送门
解题思路
本题首先要明白,在每一天时,最优策略是先进行操作2(卖),再进行操作1(买),才能是利益最大化。
本题很显然当只有两天时,是一个完全背包,就是把当日价钱当做体积,把明日价格和今日价格的差作为价值,跑一边完全背包即可。时间复杂度O(TNM)
然后我们考虑满分做法——我们用dp[j]表示还剩下j个体积时,所能获得的最大利益。
然后对于后面的所有天,两天跑一遍完全背包。每一次统计时答案就是dp[m]+m,即利润+本金。
这里一定要注意对于每一天来说,购买的方式对以后的赚钱并未影响,所以只需记录下一天下来最大的钱数(即明日的本金)即可。然后还要清空dp数组。
还有一个重点就是对于每一样物品,在第x天买入k件,第x+1天卖出k件,又买入k件,第x+2天又买入k件,这个过程其实就相当于在第x天买入k件,在x+2天卖出k件,所以我们枚举所有的可能不受限制(只不过多算了几步罢了)。
这里还可以这样理解(贪心):就是在当天买的物品,第二天必须全部卖出去。如果不卖是划算的,那么再买回来即可。
还有一个地方比较难理解:为什么我们不用记录怎样买的呢?在第x天时不会卖出去一些手上没有的纪念品吗?
答案时否定的。Why?
看代码,当我们买某件纪念品的时候,我们加上的价值是(明日价格-今日价格),从数值上讲是加上明天接着卖出的话赚的利润,感性理解的话是今天买的这几件物品在第二天一定全部卖出去。所以每天的操作实际上只有1操作(买)。
很显然,只要钱足够,可以买进无限个。
AC代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn=;
const int maxm=;
int T,n,m,p[maxn][maxn],dp[maxm];
//第t天买到第i件物品时剩余容量是j元的最大利润。
int main()
{
cin>>T>>n>>m;
for(int i=;i<=T;i++){
for(int j=;j<=n;j++) {
scanf("%d",&p[i][j]);
}
}
for(int t=;t<=T;t++){
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++){
for(int j=p[t][i];j<=m;j++){
dp[j]=max(dp[j],dp[j-p[t][i]]+p[t+][i]-p[t][i]);
}
}
m=max(m,dp[m]+m);
}
cout<<m;
return ;
}
//CSP2019普及组 t3
洛谷 P5662 纪念品 & [NOIP2019普及组] (dp,完全背包)的更多相关文章
- 洛谷P3957 跳房子(Noip2017普及组 T4)
今天我们的考试就考到了这道题,在考场上就压根没有思路,我知道它是一道dp的题,但因为太弱还是写不出来. 下来评讲的时候知道了一些思路,是dp加上二分查找的方式,还能够用单调队列优化. 但看了网上的许多 ...
- 洛谷 P5662 纪念品
题目传送门 解题思路: 一道DP,完全背包,不过有点不同于模板.因为本题的每件物品可自由在不同的时间买卖,且不同时间价格不同. 这道题的关键在于要明白一个非常傻逼的性质,就是我在某天买了第i个物品,然 ...
- 题解 【洛谷P1035】[NOIP2002普及组]级数求和
[NOIP2002普及组]级数求和 这个题……用循环也是可以的,不过我写了两种循环的题解,供各位dalao参考!O(∩_∩)O谢谢! for循环版本: #include<bits/stdc++. ...
- 题解【洛谷P1046】[NOIP2005普及组] 陶陶摘苹果
[NOIP2005] 陶陶摘苹果 首先,我们用一个数组s[11]存储每个苹果的高度. 然后,用a表示陶陶的身高. 接着,用a+30与s[i]比较,大于则计数器加一. 最后,输出计数器的值即可. #in ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 洛谷 P3177 [HAOI2015]树上染色 树形DP
洛谷 P3177 [HAOI2015]树上染色 树形DP 题目描述 有一棵点数为 \(n\) 的树,树边有边权.给你一个在 \(0 \sim n\)之内的正整数 \(k\) ,你要在这棵树中选择 \( ...
- 洛谷 P4072 [SDOI2016]征途 斜率优化DP
洛谷 P4072 [SDOI2016]征途 斜率优化DP 题目描述 \(Pine\) 开始了从 \(S\) 地到 \(T\) 地的征途. 从\(S\)地到\(T\)地的路可以划分成 \(n\) 段,相 ...
- 洛谷 P5660 数字游戏 & [NOIP2019普及组]
传送门 洛谷改域名了QAQ 解题思路 没什么好说的,一道红题,本不想发这篇博客 ,但还是尊重一下CCF吧QAQ,怎么说也是第一年CSP呢! 用getchar一个个读入.判断.累加,最后输出即可. 不过 ...
- 洛谷 P5663 加工零件 & [NOIP2019普及组] (奇偶最短路)
传送门 解题思路 很容易想到用最短路来解决这一道问题(题解法),因为两个点之间可以互相无限走,所以如果到某个点的最短路是x,那么x+2,x+4也一定能够达到. 但是如何保证这是正确的呢?比如说到某个点 ...
随机推荐
- jquery 判断文字是否超出div出现三个点的省略号
现在有个需求,就是一个div宽度固定,但是文字可能会超出,超出出现三个点省略,然后鼠标划入的时候显示全部,不超出鼠标划入就不显示,这就意味着要判断文字是否超出了 参考代码 <html lang= ...
- Android图片缩放 指定尺寸
//使用Bitmap加Matrix来缩放 public static Drawable resizeImage(Bitmap bitmap, int w, int h) { ...
- wannalfy 挑战赛7 E 珂朵莉与GCD (离线+线段树/树状数组)
链接:https://www.nowcoder.com/acm/contest/56/E 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 716800K,其他语言1433600K 6 ...
- SettingBar的点击事件拦截
接下来我们再来看另外一个案例,正如上面界面上显示的两个条目,车辆选择和始发地点选择,他们都有一个共同的特点就是都有共同的标题,内容和右剪头按钮,这种情况下我们都会把它封装成一个组合的自定义View来显 ...
- 实验报告(一)&第三周总结
Java实验报告 实验一 Java开发环境与简单Java程序 一. 实验目的 (1) 熟悉JDK开发环境 (2) 熟练掌握结构化程序设计方法 二. 实验内容 1. 打印输 ...
- Mysql 5.7安装与配置-默认密码
Mysql下载 官方下载路径:https://dev.mysql.com/downloads/mysql/ 网盘下载(windows 32-64): 链接:https://pan.baidu.com/ ...
- inode节点号
查看分区信息命令 df -Th 查看文件inode节点号 ls -i b.txt 查看系统中与b.txt 的inode节点号相同的所有文件,即硬链接 find / -inum xxxx(b.tx ...
- SpringMVC中mvc:view-controller的使用
1.重定向 <mvc:view-controller path="/" view-name="redirect:/admin/index"/> 即如 ...
- Git:目录
ylbtech-Git:目录 1.返回顶部 1. https://git-scm.com/ 2. 2.返回顶部 1.Easy Git Integration Tools https://marketp ...
- 【mysql】如何通过navicat配置表与表的多对一关系,一对一关系?设计外键的效果
背景: 现在要将接口自动化测试结果持久化,当前只是每次运行接口测试,将测试结果通过邮件发送给项目组成员.邮件内容如下: 表设计: 为了呈现这个结果:我设计了2张表run_result和run_deta ...