P1987 摇钱树
题意:有n棵摇钱树,k天,每天可砍一棵并获得其金币
每棵树初始有$a_i$个金币,每天减少$b_i$个
问k天得到的最多金币数
这题很明显是DP(锻炼自己的机会来了QAQ)
设$f[i][j]$代表前i棵数,到第j天所得最大值
$f[i][j]=max(f[i-1][j],f[i-1][j-1]+a[i]-(j-1)*b[i])$ 666
但是跑完样例发现
f[3][2]=44
f[3][3]=43!!!
what???
咋多了一天答案反而减少了??
输出DP过程,发现$a[i]-(j-1)*b[i]$可能是负的!!
但实际上一棵树不可能有负数个金币
所以判断若是负数让其等于0
这还不够,f[3][3]=44.......应该是47
假设我们有3棵树且要选全部,每棵价值和每次消耗分别为$m1,m2,m3;b1,b2,b3;$则$总价值=m1+m2+m3-k1*b1-k2*b2-k3*b3$,
很明显我们要选消耗大的啊
所以排序后,47自然就出来了qaq
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define int long long
#define olinr return
#define _ 0
#define love_nmr 0
#define DB double
int n;
int k;
struct node
{
int num;
int down;
friend bool operator < (const node &a,const node &b)
{
return a.down>b.down;
}
}a[];
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
f=-f;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return x*f;
}
inline void put(int x)
{
if(x<)
{
x=-x;
putchar('-');
}
if(x>)
put(x/);
putchar(x%+'');
}
int f[][];
signed main()
{
while()
{
n=read();
k=read();
if(!n&&!k) break;
memset(f,,sizeof f);
for(int i=;i<=n;i++)
a[i].num=read();
for(int i=;i<=n;i++)
a[i].down=read();
sort(a+,a+n+);
for(int j=;j<=k;j++)
for(int i=;i<=n;i++)
{
int x=a[i].num-(j-)*a[i].down;
x=x>? x:;
f[i][j]=max(f[i-][j],f[i-][j-]+x);
}
int ans=;
for(int i=;i<=n;i++)
ans=max(ans,f[n][i]);
put(ans);
putchar('\n');
}
olinr ~~(^_^)+love_nmr;
}
/*
3 3
10 20 30
4 5 6
0 0
4 3
20 30 40 50
2 7 6 5
*/
P1987 摇钱树的更多相关文章
- 洛谷 P1987 摇钱树
题目戳 题目描述 Cpg 正在游览一个梦中之城,在这个城市中有n棵摇钱树...这下,可让Cpg看傻了...可是Cpg只能在这个城市中呆K天,但是现在摇钱树已经成熟了,每天每棵都会掉下不同的金币(不属于 ...
- 洛谷 - P1987 - 摇钱树 - dp - 贪心
https://www.luogu.org/problemnew/show/P1987 这道题,假如是n==k,也就是把所有的树都砍完,我就知道要贪心去做,因为树给的初始金币是固定的,每天掉金币,当然 ...
- 摇钱树运营小工具UI设计.vsd
去年,我负责公司的一个互联网投融资平台——摇钱树.系统运营过程中,业务和客服那边不断的反馈一些事情让技术这边协助实现.例如,土豪客户忘记登录密码后懒得自己重置,更愿意选择搭讪客服MM:再比如,客户多次 ...
- [vijos1574]摇钱树<dp+贪心>
题目链接:https://vijos.org/p/1574 这道题是昨晚一个叫Ztravellers的大佬推荐的,确实觉得这是一道很有意思的题,很多方面都很有意思: 初见这道题,估计想法都是贪心,因为 ...
- 面向对象的OOA、OOD、OOP
OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的 ...
- Chinese culture
文房四宝 笔墨纸砚是中国古代文人书房中必备的宝贝,被称为“文房四宝”.用笔墨书写绘画在 中国可追溯到五千年前.秦(前221---前206)时已用不同硬度的毛和竹管制笔:汉代(前206—公元220) ...
- [计算机、网络相关历史]unix简史
本文2001年由台湾“网络农夫”所写,其人生平不祥,此文受鸟哥大力推崇,两人应该相识.文章写得很不错,应该是查了很多资料整理而成的,美中不足的是好多语句不通顺,国考语文绝对不及格,哈哈. 0.我的准备 ...
- Anti-pattern
https://en.wikipedia.org/wiki/Anti-pattern https://zh.wikipedia.org/wiki/反面模式 An anti-pattern is a c ...
- OOA、OOD、OOP
复习 OOA.OOD.OOP OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构 ...
随机推荐
- 基于OpenCV的火焰检测(三)——HSI颜色判据
上文向大家介绍了如何用最简单的RGB判据来初步提取火焰区域,现在我要给大家分享的是一种更加直观的判据--HSI判据. 为什么说HSI判据是更加直观的判据呢?老规矩,先介绍一下HSI色彩模型: HSI颜 ...
- js查看对象内容
function show_obj(obj){ var temp,p1Str=""; for(temp in obj){ p1Str=p1Str+temp+":" ...
- 渗透测试框架-Fsociety
下载项目并赋予权限,打开 ┌─[root@sch01ar]─[/sch01ar] └──╼ #git clone https://github.com/Manisso/fsociety ┌─[root ...
- FFmpeg结构体:AVInputFormat
1.描述 AVInputFormat 是类似COM 接口的数据结构,表示输入文件容器格式,着重于功能函数,一种文件容器格式对应一个AVInputFormat 结构,在程序运行时有多个实例,位于avof ...
- 01-19asp.net基础--网站登录及验证
第一步: 1)首先使用“CodeSmith”将Examinee类实体化,并生成实体类连接数据库的方法,存在解决方案下的“App_Code”文件夹下. 修改一下连接某个数据库: private SqlC ...
- eclipse利用mybatis-generator生成代码
由于mybatis是半自动的ORM框架,表到POJO的映射可以由mybatis-generator完成,映射文件也可以由它生成,下面介绍生成步骤: 1.新建maven项目:File->Other ...
- java判断一个字符串中是否包含全角
public static boolean isAngle(String str){ if(str.getBytes().length==str.length()){ //全是半角 return tr ...
- [Python Study Notes]双层柱状图绘制
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- JAVA基础知识总结14(String、StringBuffer、StringBuilder)
1.String字符串: java中用String类进行描述.对字符串进行了对象的封装.这样的好处是可以对字符串这种常见数据进行方便的操作.对象封装后,可以定义N多属性和行为. 如何定义字符串对象呢? ...
- Internet Intranet Extranet
Internet: There's only one of it, and you're on it now. Intranet: An internal network local to a com ...