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】剪草相关推荐

  1. 【NOIP2012模拟10.25】旅行

    题目 给定一个n行m列的字符矩阵,'.'代表空地,'X'代表障碍.移动的规则是:每秒钟以上下左右四个方向之一移动一格,不能进入障碍. 计算:在空地中随机选择起点和终点(可以重合,此时最短耗时为0),从 ...

  2. JZOJ 3053 【NOIP2012模拟10.25】旅行

    旅行 题目大意 给定一个 n n行mm列的字符矩阵, 告诉你哪些格子可以进入,哪些不可以.移动的规则为:每秒钟以上下左右四个方向之一移动一格,不能进入障碍. 计算:在空地中随机选择起点和终点(可以重合 ...

  3. jzoj3058. 【NOIP2012模拟10.26】火炬手

    jzoj3058. [NOIP2012模拟10.26]火炬手 题目 Description Input Output Sample Input Sample Output Hint 分析 做法一 做法 ...

  4. JZOJ 5925. 【NOIP2018模拟10.25】naive 的瓶子

    Description 众所周知,小 naive 有 n 个瓶子,它们在桌子上排成一排.第 i 个瓶子的颜色为 ci,每个瓶子都有灵性,每次操作可以选择两个相邻的瓶子,消耗他们颜色的数值乘积的代价将其 ...

  5. 【NOIP2012模拟10.20】友好数对

    Description 如果一个数a 能由一个数b 旋转得到,那么我们称<a,b>为友好数对,如12345 和45123 为友好数对,12345 和54321 不为友好数对.给出两个正整数 ...

  6. JZOJ 3057. 【NOIP2012模拟10.26】电影票

    .. 分析: 代码: 分析: 我们通过找规律,可以得知答案为: 但我们直接通过高精度计算的话铁定TTT飞 所以我们将式子带入其中,就会发现分母和分子是可以约分的!并且分母可以被约掉 所以我们可以创建两 ...

  7. 【NOIP2012模拟10.26】火炬手

    Description 全运会就要开始了,笨笨想成为湖南地区的火炬手,经过层层选拔,最终到了最后一关,这一关给出了一个正整数n(N<=100000),求一个最小的正整数m,使得n*m的十进制表示 ...

  8. jzoj 3058. 【NOIP2012模拟10.26】火炬手

    Description 全运会就要开始了,笨笨想成为湖南地区的火炬手,经过层层选拔,最终到了最后一关,这一关给出了一个正整数n(N<=100000),求一个最小的正整数m,使得n*m的十进制表示 ...

  9. 高中OJ3057【NOIP2012模拟10.26】电影票

    (毫无PS痕迹) 表示这题在听的时候越听越懵逼 就听懂了推出来的公式,之后的化简一直是处于掉线状态 最后把旧OJ的义务植树加强2星复制过来再改了一下就神奇般的AC了 正解: 讲题时那人画了一个类似下图 ...

最新文章

  1. Java多线程面试题
  2. [Android]动态加载/热部署框架汇总
  3. #转载:杨辉三角形实现过程详解-c语言基础
  4. Ubuntu20.04 安装VMware Tools
  5. systemverilog 关联数组
  6. mysql 慢日志报警_一则MySQL慢日志监控误报的问题分析
  7. linux 设置java内存大小_Linux 下修改Tomcat使用的JVM内存大小
  8. 【Elasticsearch】 elasticsearch之Recovery
  9. java 实现验证码功能
  10. 江西财经大学计算机类含物联网专业,江西财经大学计算机类(02含物联网工程)专业2016年在湖北理科高考录取最低分数线...
  11. php 代码分析软件,分析和解析PHP代码的7大工具
  12. Java获取本机ip地址的代码
  13. python基础资料(Learn|Codecademy好用的工具)
  14. Python让你的终端输出变得五彩斑斓
  15. Windows MySQL 下载及安装教程
  16. less保存后自动生成css文件
  17. 警方提醒网民警惕网络诈骗七种作案手法
  18. 用LED柔性软屏来设计异形造型的创意显示屏。
  19. ZZULIOJ.1153: 简易版最长序列
  20. 2021年T电梯修理考试资料及T电梯修理理论考试

热门文章

  1. 记录家庭收支,让家庭消费不超支
  2. 欧拉法求解已知初值微分方程解
  3. 屏幕偏色的原因及解决方法
  4. 美团秋招笔试——算法岗
  5. [滴滴笔试]java岗
  6. js将图片转换成base64
  7. 对傅里叶变换公式讨论 很经典
  8. 区块链-04-BCT-协议
  9. 全语言通用的ASCIL表讲解,这一篇就够了
  10. Correction of the overexposed region in digital color image阅读札记