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 ...
随机推荐
- Android笔记 (一) 第一次接触Android
1.下载android SDK 访问http://developer.android.com/ → GET THE SDK → Installing the Android SDK → STAN ...
- springboot Properties加载顺序源码分析
关于properties: 在spring框架中properties为Environment对象重要组成部分, springboot有如下几种种方式注入(优先级从高到低): 1.命令行 java -j ...
- Herbert Schildt
赫伯特·希尔特; Herbert Schildt,是世界顶级程序设计大师,全球顶尖编程图书作者之一. www.HerbSchildt.com 1.c/c++的核心设计原理之一就是程序员的控制,java ...
- NodeJS开发博客(二) 接入数据库
1. mysql 数据库下载网址:https://dev.mysql.com/downloads/mysql/ 账号是 root 密码是 a1************ 网站账号是邮箱,密码是 Aa1* ...
- HTTP/TCP/IP UDP Socket等区别联系
1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上. ...
- Mac OS下安装MongoDB以及配置方法总结【笔记】
首先打开命令框,输入: brew install mongodb 安装完成后 启动.停止.重启如下 brew services start mongodb brew services stop mo ...
- 阿里云 centos7 安装mysql数据库
环境:阿里云ECS服务器,系统为centos7.2 删除原来的数据库: centos7中默认安装了数据库MariaDB,如果直接安装MySQL的话,会直接覆盖掉这个数据库,当然也可以手动删除一下: [ ...
- 多任务5-协程(IO密集型适用)--gevent完成多任务及monkey补丁
代码: import gevent def f1(n): for i in range(n): print(gevent.getcurrent(),i) gevent.sleep(1) def f2( ...
- HDU-1398-Square Coins(母函数)
链接: https://vjudge.net/problem/HDU-1398 题意: People in Silverland use square coins. Not only they hav ...
- 爬虫(九):scrapy框架回顾
scrapy文档 一:安装scrapy a. pip3 install wheel b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#tw ...
