【NOIP2012模拟10.25】剪草
Description
有N棵小草,编号0至N-1。奶牛Bessie不喜欢小草,所以Bessie要用剪刀剪草,目标是使得这N棵小草的高度总和不超过H。在第0时刻,第i棵小草的高度是h[i],接下来的每个整数时刻,会依次发生如下三个步骤:
(1)每棵小草都长高了,第i棵小草长高的高度是grow[i]。
(2)Bessie选择其中一棵小草并把它剪平,这棵小草高度变为0。注意:这棵小草并没有死掉,它下一秒还会生长的。
(3)Bessie计算一下这N棵小草的高度总和,如果不超过H,则完成任务,一切结束, 否则轮到下一时刻。
你的任务是计算:最早是第几时刻,奶牛Bessie能完成它的任务?如果第0时刻就可以完成就输出0,如果永远不可能完成,输出-1,否则输出一个最早的完成时刻。
Input
第一行,两个整数N和H。 1 ≤ N ≤ 50,0 ≤ H ≤ 1000000。
第二行,N个整数,表示h[i]。0 ≤ h[i] ≤ 100000。
第三行,N个整数,表示grow[i]。1 ≤ grow[i] ≤ 100000。
Output
一个整数,最早完成时刻或-1。
Sample Input
7 33
5 1 6 5 8 4 7
2 1 1 1 4 3 2
Sample Output
5
这题考场没时间想。。。(在刚第一题&第三题ing。。。)
在听完讲解以后,发现水法原来也可以过的。。。
但我这种人怎么可能打水法呢?
所以就打了个DP。(0ms嘻嘻)
首先,我们可以证明出每一棵草最多见剪一次,剪两次就不是最优的了。
发现讲题人的DPf[i][j][k]可以优化一下。
我们设f[i][j]表示当前到第i棵草,剪了j棵草(都是前i棵)所能剪掉的最大高度。
转移方程就更容易想了:
f[i][j]=max(f[i-1][j],f[i-1][j-1]+a[i].h+j*a[i].grow);
先预处理出f数组,然后我们只需要暴力扫一遍时间并判断即可。
code
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{int h,grow;}a[51];
int n,H,s=0,ss=0,f[51][51];inline int read()
{int x=0; char c=getchar();while (c<'0' || c>'9') c=getchar();while (c>='0' && c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x;
}int cmp(node x,node y) {return x.grow<y.grow;}int main()
{freopen("jc.in","r",stdin);
// freopen("jc.out","w",stdout);n=read(),H=read();for (int i=1;i<=n;i++)a[i].h=read(),s+=a[i].h;for (int i=1;i<=n;i++)a[i].grow=read(),ss+=a[i].grow;if (s<=H) return 0&puts("0");sort(a+1,a+n+1,cmp);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]+a[i].h+j*a[i].grow);for (int x=1;x<=n;x++)if (s+ss*x-f[n][x]<=H)return 0&printf("%d\n",x);puts("-1");return 0;
}
【NOIP2012模拟10.25】剪草相关推荐
- 【NOIP2012模拟10.25】旅行
题目 给定一个n行m列的字符矩阵,'.'代表空地,'X'代表障碍.移动的规则是:每秒钟以上下左右四个方向之一移动一格,不能进入障碍. 计算:在空地中随机选择起点和终点(可以重合,此时最短耗时为0),从 ...
- JZOJ 3053 【NOIP2012模拟10.25】旅行
旅行 题目大意 给定一个 n n行mm列的字符矩阵, 告诉你哪些格子可以进入,哪些不可以.移动的规则为:每秒钟以上下左右四个方向之一移动一格,不能进入障碍. 计算:在空地中随机选择起点和终点(可以重合 ...
- jzoj3058. 【NOIP2012模拟10.26】火炬手
jzoj3058. [NOIP2012模拟10.26]火炬手 题目 Description Input Output Sample Input Sample Output Hint 分析 做法一 做法 ...
- JZOJ 5925. 【NOIP2018模拟10.25】naive 的瓶子
Description 众所周知,小 naive 有 n 个瓶子,它们在桌子上排成一排.第 i 个瓶子的颜色为 ci,每个瓶子都有灵性,每次操作可以选择两个相邻的瓶子,消耗他们颜色的数值乘积的代价将其 ...
- 【NOIP2012模拟10.20】友好数对
Description 如果一个数a 能由一个数b 旋转得到,那么我们称<a,b>为友好数对,如12345 和45123 为友好数对,12345 和54321 不为友好数对.给出两个正整数 ...
- JZOJ 3057. 【NOIP2012模拟10.26】电影票
.. 分析: 代码: 分析: 我们通过找规律,可以得知答案为: 但我们直接通过高精度计算的话铁定TTT飞 所以我们将式子带入其中,就会发现分母和分子是可以约分的!并且分母可以被约掉 所以我们可以创建两 ...
- 【NOIP2012模拟10.26】火炬手
Description 全运会就要开始了,笨笨想成为湖南地区的火炬手,经过层层选拔,最终到了最后一关,这一关给出了一个正整数n(N<=100000),求一个最小的正整数m,使得n*m的十进制表示 ...
- jzoj 3058. 【NOIP2012模拟10.26】火炬手
Description 全运会就要开始了,笨笨想成为湖南地区的火炬手,经过层层选拔,最终到了最后一关,这一关给出了一个正整数n(N<=100000),求一个最小的正整数m,使得n*m的十进制表示 ...
- 高中OJ3057【NOIP2012模拟10.26】电影票
(毫无PS痕迹) 表示这题在听的时候越听越懵逼 就听懂了推出来的公式,之后的化简一直是处于掉线状态 最后把旧OJ的义务植树加强2星复制过来再改了一下就神奇般的AC了 正解: 讲题时那人画了一个类似下图 ...
最新文章
- Java多线程面试题
- [Android]动态加载/热部署框架汇总
- #转载:杨辉三角形实现过程详解-c语言基础
- Ubuntu20.04 安装VMware Tools
- systemverilog 关联数组
- mysql 慢日志报警_一则MySQL慢日志监控误报的问题分析
- linux 设置java内存大小_Linux 下修改Tomcat使用的JVM内存大小
- 【Elasticsearch】 elasticsearch之Recovery
- java 实现验证码功能
- 江西财经大学计算机类含物联网专业,江西财经大学计算机类(02含物联网工程)专业2016年在湖北理科高考录取最低分数线...
- php 代码分析软件,分析和解析PHP代码的7大工具
- Java获取本机ip地址的代码
- python基础资料(Learn|Codecademy好用的工具)
- Python让你的终端输出变得五彩斑斓
- Windows MySQL 下载及安装教程
- less保存后自动生成css文件
- 警方提醒网民警惕网络诈骗七种作案手法
- 用LED柔性软屏来设计异形造型的创意显示屏。
- ZZULIOJ.1153: 简易版最长序列
- 2021年T电梯修理考试资料及T电梯修理理论考试