洛谷 P2647 最大收益
P2647 最大收益
题目描述
现在你面前有n个物品,编号分别为1,2,3,……,n。你可以在这当中任意选择任意多个物品。其中第i个物品有两个属性Wi和Ri,当你选择了第i个物品后,你就可以获得Wi的收益;但是,你选择该物品以后选择的所有物品的收益都会减少Ri。现在请你求出,该选择哪些物品,并且该以什么样的顺序选取这些物品,才能使得自己获得的收益最大。
注意,收益的减少是会叠加的。比如,你选择了第i个物品,那么你就会获得了Wi的收益;然后你又选择了第j个物品,你又获得了Wj-Ri收益;之后你又选择了第k个物品,你又获得了Wk-Ri-Rj的收益;那么你获得的收益总和为Wi+(Wj-Ri)+(Wk-Ri-Rj)。
输入输出格式
输入格式:
第一行一个正整数n,表示物品的个数。
接下来第2行到第n+1行,每行两个正整数Wi和Ri,含义如题目所述。
输出格式:
输出仅一行,表示最大的收益。
输入输出样例
2 5 2 3 5
6
说明
20%的数据满足:n<=5,0<=Wi,Ri<=1000。
50%的数据满足:n<=15,0<=Wi,Ri<=1000。
100%的数据满足:n<=3000,0<=Wi,Ri<=200000。
样例解释:我们可以选择1号物品,获得了5点收益;之后我们再选择2号物品,获得3-2=1点收益。最后总的收益值为5+1=6。
思路:
算法1:
首先考虑最暴力的做法,枚举每个物品是选还是不选。得到一个物品的集合后,枚举其全排列。在所有方案中找到最大值。时间复杂度O(2^n*n!),可以通过20%的数据。
算法2:
考虑对题目进行一个等价的变换:即选择某个物品后,选择该物品前所有选择的物品的收益减少Ri。
然后我们可以贪心地对Ri从大到小排个序,然后搜索的时候只需要枚举每个物品是选还是不选,无需枚举全排列了。时间复杂度是O(2^n),可以通过50%的数据。
算法3:
受算法2的启发,我们可以设计一个动态规划算法。首先仍然是要按照Ri从大到小排个序。然后设F[i][j]表示前i个物品中选j个可以获得的收益最大值。
状态转移方程:F[i][j]=max{F[i-1][j],F[i-1][j-1]+W[i]-R[i]*(j-1)}
边界条件:F[1][1]=W[1]
最后的答案=max{F[n][i]}
算法2和算法3的贪心的正确性不难证明。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,ans,f[3001][3001]; struct nond{int w,r; }v[3001]; int cmp(nond a,nond b){return a.r>b.r; } int main(){scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d%d",&v[i].w,&v[i].r);sort(v+1,v+1+n,cmp);f[1][1]=v[1].w;for(int i=1;i<=n;i++)for(int j=1;j<=i;j++)f[i][j]=max(f[i-1][j],f[i-1][j-1]+v[i].w-v[i].r*(j-1));for(int i=1;i<=n;i++) ans=max(ans,f[n][i]);cout<<ans; }
转载于:https://www.cnblogs.com/cangT-Tlan/p/7507143.html
洛谷 P2647 最大收益相关推荐
- 【洛谷P3410】拍照题解(最大权闭合子图总结)
题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...
- 网络流建图方法(二)——辅助点(虚点)决策法洛谷 P1361 小M 的作物 Dinic
inic声明:本博客默认读者会最大流最小割的定理,会Dinic, 最小割在数值上 == 最大流 但是在意义上没有任何关系,姑且可以这样求得最小割,当然可以自行百度最小割的证明定理 还是从题目开始说起 ...
- 洛谷P1023 税收与补贴
洛谷P1023 税收与补贴问题(模拟) 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格 ...
- 【洛谷月赛】洛谷11月月赛·Day1
洛谷2614 计算器弹琴 本题地址: http://www.luogu.org/problem/show?pid=2614 题目描述 总所周知,计算器可以拿来干很多它本不应该干的事情,比如写作文.(参 ...
- (最小割)洛谷P1361 小M的作物
洛谷P1361 小M的作物 思路: 这是一个两者取一的模型,将点集一分为二. 最小割在数值上等同于最大流.割去权值和最小的边,使图分成两部分,割下来的边权值和为最小割. 对于此题,先不考虑种在一起的情 ...
- 洛谷P1023 税收与补贴问题
洛谷P1023 税收与补贴问题(模拟) 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格 ...
- 洛谷日常刷题(洛谷官方题单 思路+详解)
目录 前言 非官方题单的题 P1141 01迷宫 1-4 递推与递归 P1255 数楼梯 1002 [ NOIP 2002 普及组]过河卒 P1044 [NOIP2003 普及组] 栈 P1028 [ ...
- 洛谷大起义胜利的经验总结
UPD1(2019.7.11):chen_zhe解除了对我的禁言,但仍保持大脑皮层对刷题重心转到LibreOJ的决策,50年不变. 2019-07-09 9:54 结束黑暗无光的\(luogu\)统治 ...
- 洛谷.P2705 小球
题目描述 有 R 个红色盒子和 B 个蓝色盒子,还有 R 个红色小球和 B 个蓝色小球.每个盒子只能装一个小球,每个小球都要放在一个盒子里.如果把一个红色小球放在一个红色盒子里,那么得分是 C.如果把 ...
最新文章
- sort降序shell_希爾排序(Shell Sort)
- HashSet.contains
- php5.6non thread safe 区别,PHP版本Non Thread Safe和Thread Safe如何选择?区别是什么?
- 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】
- python人脸实时检测_openCV+python实现人脸实时检测
- 美国顶尖大学的博士是怎样练成的?
- 会计基础(1)利得和损失
- sql服务器密码如何显示,如何查看sql数据库密码
- android 蓝牙播放器,Android 蓝牙音乐播放器
- 超详细手把手教你App上线AppStore
- 榜样的力量——2019 IDC中国数字化转型年度盛典启示录
- 数据结构 严蔚敏 第八章 排序 期末复习总结
- PHP 图片上传 图片压缩
- KubeSphere安装redis集群,全程超带劲
- c语言高级编程培训,C语言高级编程
- 安卓5.1自带浏览器主页设置–转载
- 5g通用模组是什么_5G通用模组需要做哪些温湿度可靠性测试?
- EXCEL中空白单元格如何快速填充为0
- 如何分析PARSEC源码
- 用Python实现跳一跳自动跳跃
热门文章
- kafka session.timeout.ms 是指消费一条数据的时间?_干货 | Kafka 内核知识梳理,附思维导图...
- mongodb教程_MongoDB教程
- java程序示例_Java程序中的Google搜索示例
- RxJava操作符lift笔记25
- Akka的Actor生命周期《Eight》译
- Advanced Installer 历史版本下载
- 有助提高效率的Web前端开发框架有哪些?
- mac下,vagrant桥接,选择“en0: 以太网”无法启动虚拟机解决方案
- Mac下查看Git的安装目录
- 【数据结构】广义表的默认成员函数、深度、大小、打印