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,含义如题目所述。

输出格式:

输出仅一行,表示最大的收益。

输入输出样例

输入样例#1:

2
5 2
3 5

输出样例#1:

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 最大收益相关推荐

  1. 【洛谷P3410】拍照题解(最大权闭合子图总结)

    题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...

  2. 网络流建图方法(二)——辅助点(虚点)决策法洛谷 P1361 小M 的作物 Dinic

    inic声明:本博客默认读者会最大流最小割的定理,会Dinic, 最小割在数值上 == 最大流 但是在意义上没有任何关系,姑且可以这样求得最小割,当然可以自行百度最小割的证明定理 还是从题目开始说起 ...

  3. 洛谷P1023 税收与补贴

    洛谷P1023 税收与补贴问题(模拟) 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格 ...

  4. 【洛谷月赛】洛谷11月月赛·Day1

    洛谷2614 计算器弹琴 本题地址: http://www.luogu.org/problem/show?pid=2614 题目描述 总所周知,计算器可以拿来干很多它本不应该干的事情,比如写作文.(参 ...

  5. (最小割)洛谷P1361 小M的作物

    洛谷P1361 小M的作物 思路: 这是一个两者取一的模型,将点集一分为二. 最小割在数值上等同于最大流.割去权值和最小的边,使图分成两部分,割下来的边权值和为最小割. 对于此题,先不考虑种在一起的情 ...

  6. 洛谷P1023 税收与补贴问题

    洛谷P1023 税收与补贴问题(模拟) 题目背景 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格 ...

  7. 洛谷日常刷题(洛谷官方题单 思路+详解)

    目录 前言 非官方题单的题 P1141 01迷宫 1-4 递推与递归 P1255 数楼梯 1002 [ NOIP 2002 普及组]过河卒 P1044 [NOIP2003 普及组] 栈 P1028 [ ...

  8. 洛谷大起义胜利的经验总结

    UPD1(2019.7.11):chen_zhe解除了对我的禁言,但仍保持大脑皮层对刷题重心转到LibreOJ的决策,50年不变. 2019-07-09 9:54 结束黑暗无光的\(luogu\)统治 ...

  9. 洛谷.P2705 小球

    题目描述 有 R 个红色盒子和 B 个蓝色盒子,还有 R 个红色小球和 B 个蓝色小球.每个盒子只能装一个小球,每个小球都要放在一个盒子里.如果把一个红色小球放在一个红色盒子里,那么得分是 C.如果把 ...

最新文章

  1. sort降序shell_希爾排序(Shell Sort)
  2. HashSet.contains
  3. php5.6non thread safe 区别,PHP版本Non Thread Safe和Thread Safe如何选择?区别是什么?
  4. 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】
  5. python人脸实时检测_openCV+python实现人脸实时检测
  6. 美国顶尖大学的博士是怎样练成的?
  7. 会计基础(1)利得和损失
  8. sql服务器密码如何显示,如何查看sql数据库密码
  9. android 蓝牙播放器,Android 蓝牙音乐播放器
  10. 超详细手把手教你App上线AppStore
  11. 榜样的力量——2019 IDC中国数字化转型年度盛典启示录
  12. 数据结构 严蔚敏 第八章 排序 期末复习总结
  13. PHP 图片上传 图片压缩
  14. KubeSphere安装redis集群,全程超带劲
  15. c语言高级编程培训,C语言高级编程
  16. 安卓5.1自带浏览器主页设置–转载
  17. 5g通用模组是什么_5G通用模组需要做哪些温湿度可靠性测试?
  18. EXCEL中空白单元格如何快速填充为0
  19. 如何分析PARSEC源码
  20. 用Python实现跳一跳自动跳跃

热门文章

  1. kafka session.timeout.ms 是指消费一条数据的时间?_干货 | Kafka 内核知识梳理,附思维导图...
  2. mongodb教程_MongoDB教程
  3. java程序示例_Java程序中的Google搜索示例
  4. RxJava操作符lift笔记25
  5. Akka的Actor生命周期《Eight》译
  6. Advanced Installer 历史版本下载
  7. 有助提高效率的Web前端开发框架有哪些?
  8. mac下,vagrant桥接,选择“en0: 以太网”无法启动虚拟机解决方案
  9. Mac下查看Git的安装目录
  10. 【数据结构】广义表的默认成员函数、深度、大小、打印