洛谷 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也一定能够达到. 但是如何保证这是正确的呢?比如说到某个点 ...
随机推荐
- 【windows&flask】flask通过service自动运行
最近在学习在windows平台用flask框架提供Restful API服务,需要使得flask的windows应用能够开机自动运行,并且后台运行,所以通过service来实现. 首先尝试的是在自己派 ...
- MySQL报错:Cause: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xA8","...' for column 'obj_value' at row 1
1.插入MySQL表时,报错:Cause: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xA8","...' ...
- 2018山东省赛 G Game ( Nim博弈 && DP )
题目链接 题意 : 给出 N 堆石子,每次可以选择一堆石子拿走任意颗石子,最后没有石子拿的人为败者.现在后手 Bob 可以在游戏开始前拿掉不超过 d 堆的整堆石子,现在问你有几种取走的组合使得 Bob ...
- Codeforces 1203F1 Complete the Projects (easy version)
cf题面 Time limit 2000 ms Memory limit 262144 kB 解题思路 看见这题觉得贪心可做,那就贪吧.(昨天真是贪心的一天,凌晨才被这两道贪心题虐,下午多校又来,感觉 ...
- R 常用代码段
#用来根据不同的细胞来源重新画TSNE图cell_source <-colnames(immune_nobatch) cell_type <- strsplit(cell_source,s ...
- JAVA语言动手动脑问题
1. 早期经常这样定义变量 int value=100;前面的示例中这样定义变量 MyClass obj = new MyClass(); 这两种方式定义的变量是一样的吗? 答:不一样,后者开 ...
- (71)一篇文章带你熟悉HTTP协议
作者:涤生_Woo链接:http://www.jianshu.com/p/6e9e4156ece3來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本篇文章篇幅比较长,先 ...
- Elasticsearch Java Rest Client API 整理总结 (一)
http://www.likecs.com/default/index/show?id=39549
- loj#6038 「雅礼集训 2017 Day5」远行
分析 代码 #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define ...
- 十五、RF操作时间控件
由于日期控件经常用的是readonly属性,这个属性意思是此控件为可读,明白点就是只让你看,不让你动. 解决方法就是:用js去掉这个属性,就可写了,就能输入了 导入库:DateTime #方式一 op ...