[vijos1574]摇钱树<dp+贪心>
题目链接:https://vijos.org/p/1574
这道题是昨晚一个叫Ztravellers的大佬推荐的,确实觉得这是一道很有意思的题,很多方面都很有意思;
初见这道题,估计想法都是贪心,因为各方面都很符合贪心,正解也用到了贪心,不过是在dp前贪心的;
思路:
我们砍树收集金币,肯定是希望损失最小,为了损失最小,肯定要尽量先砍每天损失最大的,从这个思想可以看出我们是需要排序的。但是也不一定就是一定要损失最大的,为了答案最优,我们还需要一个dp来做这个过程。定义一个d[i][j]表示前i棵树中砍j棵,当然这个形容还有很多,比如:第j天的时候判断第i棵树砍不砍;
然后因为金币是掉落,为了避免出错,所以在转移方程时要和0比一下大小
状态转移方程:d[i][i]=max{0,d[i-1][j],d[i-1][j-1]-per[i]*(j-1)};per数组是每棵树每天会损失的金币
题很简单,思路也不难想,打题也就是两次过,所以就直接出代码了
PS:有一个小小的问题还不是很清楚,昨晚询问了众多大佬都未果,所以在这里问问各位大佬,为啥答案不一定存在d[n][k]??
上代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<queue>
#define maxn 1005
using namespace std; struct node{
int per,high;
}e[maxn]; int comp(const void*a,const void*b)
{
return (*(struct node*)a).per>(*(struct node*)b).per?-:;
} int d[maxn][maxn],n,k,ans; int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(d,,sizeof(d));
if(n==&&k==)return ;
for(int i=;i<=n;i++)
scanf("%d",&e[i].high);
for(int i=;i<=n;i++)
scanf("%d",&e[i].per);
e[].per=0x3f3f3f;
qsort(e,n+,sizeof(e[]),comp);
int ans=;
for(int i=;i<=n;i++)
for(int j=;j<=min(i,k);j++)
{
d[i][j]=max(,max(d[i-][j],d[i-][j-]+e[i].high-e[i].per*(j-)));
ans=max(ans,d[i][j]);
}
// printf("%d\n",d[n][k]);
printf("%d\n",ans);
} }
[vijos1574]摇钱树<dp+贪心>的更多相关文章
- 洛谷 - P1987 - 摇钱树 - dp - 贪心
https://www.luogu.org/problemnew/show/P1987 这道题,假如是n==k,也就是把所有的树都砍完,我就知道要贪心去做,因为树给的初始金币是固定的,每天掉金币,当然 ...
- 【bzoj4027】[HEOI2015]兔子与樱花 树形dp+贪心
题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...
- BZOJ 2021 [Usaco2010 Jan]Cheese Towers:dp + 贪心
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2021 题意: John要建一个奶酪塔,高度最大为m. 他有n种奶酪.第i种高度为h[i]( ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 【BZOJ-1046】上升序列 DP + 贪心
1046: [HAOI2007]上升序列 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3723 Solved: 1271[Submit][Stat ...
- Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)
题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和. 好难,不会写. ...
- 【HDU 2546】饭卡(DP+贪心)
贪心:最贵的留到最后买.状态转移方程:dp[j]=dp[j+a[i]]|dp[j],dp[i]表示余下i元. 原来就不足5元,那就不能买啦. #include<cstdio> #inclu ...
- POJ 1065 Wooden Sticks / hdu 1257 最少拦截系统 DP 贪心
参考链接:http://blog.csdn.net/xiaohuan1991/article/details/6956629 (HDU 1257 解题思路一样就不继续讲解) POJ 1065题意:给你 ...
- HDU1069:Monkey and Banana(DP+贪心)
Problem Description A group of researchers are designing an experiment to test the IQ of a monkey. T ...
随机推荐
- window.showModalDialog与window.open()使用
window.showModalDialog 有些浏览器不兼容,尝试用window.open() 封装替代,需要打开子窗口后向父窗口传递数据. <html> <script src= ...
- JZOJ 1154. 【GDOI2003】购物
1154. [GDOI2003]购物 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description GDOI商场推出优惠 ...
- 停下来,回头看 ——记2020BUAA软工第一次作业-热身!
description: 'Mar 1st, 2020 - Mar 3rd, 2020' 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 第一次作 ...
- node代理遇到的坑记
在进行前端mock地址代理时候,进行了webpack的node反向代理: 实际mock地址是:http://10.118.183.10/mock/hb/startwork/openredpacket ...
- Java easyui 下拉框默认选中第一个
html代码: <tr> <td> <div style="margin-bottom:5px">计价方式: <%--下拉框默认选中第 ...
- 【音视频连载-001】基础学习篇- SDL 介绍以及工程配置
技术开发故事会连载 这是音视频基础学习系列的第一篇文章,主要讲解 SDL 是什么以及为什么要用到它,看似和音视频没啥卵关系,其实必不可少. SDL 简介 SDL 是 "Simple Dire ...
- 如何使用Kibana
目录 前言 一.安装 二.加载自定义索引 三.如何搜索数据 四.如何切换中文 五.如何使用控制台 六.可视化图表 七.使用仪表盘 前言 Kibana 是为 Elasticsearch设计的开源分析和可 ...
- 结题报告--hih0CoderP1041
题目:点此 描述 小Hi和小Ho准备国庆期间去A国旅游.A国的城际交通比较有特色:它共有n座城市(编号1-n):城市之间恰好有n-1条公路相连,形成一个树形公路网.小Hi计划从A国首都(1号城市)出发 ...
- Struts UI标签的使用
先来看一下日期控件 html5标签中其实已经有日期的类型,用<input type="date">便可调用. struts里面也自带了日期控件,其使用步骤为: 1. 导 ...
- JS排序算法--冒泡排序和选择排序
在我们JS语法当中,数据类型中的复杂数据类型,有一项我们常用的数组数据类型,其中存储的数据有时是乱序的,需要排序,我们有多种方法,最简单的肯定是 :变量.sort(fonction(a,b){a> ...