Description

ar把一段凹凸不平的路分成了高度不同的N段,并用H[i]表示第i段高度。现在Tar一共有n种泥土可用,它们都能覆盖给定的连续的k个部分。

对于第i种泥土,它的价格为C[i],可以使得区间[i,min(n,i+k-1)] 的路段的高度增加E[i]。

Tar要设定一种泥土使用计划,使得使用若干泥土后,这条路最低的高度尽量高,并且这个计划必须满足以下两点要求:

(1)每种泥土只能使用一次。

(2)泥土使用成本必须小于等于M。

请求出这个最低的高度最高是多少。

Input

第一行为如上文所示的三个正整数:N,M,K。

接下来N行,每行3个如上文所示的正整数H[i],E[i],C[i]。

Output

输出有且只有一个数字,为最底部分的高度的最大值

Sample Input

4 20 1
1 3 5
1 7 3
4 6 9
3 5 13

Sample Output

3

做法(转自JZOJ):

二分+状态压缩:
二分枚举最低的高度,接下来考虑判断合法性:设f[i][j]表示在前i位完成j状态的最小金钱代价,那么只要存在状态x使得f[n][x]≤M。然后再考虑状态的转移:注意对于一位i只由它的前k位得到,那么就是说f[i][j]由它的前k位得到,所以j只有k位。k的范围是极小的所以不会超时;要使枚举的最小高度l合法,还要满足该点决策完成之后的高度≥l。然后我们就可以根据条件来进行状态转移:
f[i+1][不选的状态j]=minx(f[i+1][j>>1],f[i][j]); 且要满足最小高度为x //该位不选f[i+1][选之后的状态j]=minx(f[i+1][(j>>1)|(1<<(k-1))],f[i][j]+c[i+1]); 满足“最小高度”为x //该位选

 #include <cstdio>
#include <cstring>
#include <iostream>
#define N 107
using namespace std;
int c[N], e[N], h[N], n, m, k;
int f[N][<<], l, r; void Init()
{
scanf("%d%d%d", &n, &m, &k);
for (int i=;i<=n;i++)
scanf("%d%d%d", &h[i], &e[i], &c[i]);
} bool check(int x){
memset(f, 0x7f7f7f7f, sizeof(f));
f[][] = ;
for (int i = ; i < n; i++)
for(int j = ; j < ( << k); j++)
if (f[i][j] != 0x7f7f7f7f)
{
int heigh = ;
for (int l = ; l < k; l++)
if (j & ( << l)) heigh += e[i - k + l + ];
if (heigh + h[i + ] >= x)
f[i + ][j >> ] = min(f[i + ][j >> ], f[i][j]);
if (heigh + h[i + ] + e[i + ] >= x)
f[i + ][(j >> ) | ( << (k - ))] = min(f[i + ][(j >> ) | ( << (k - ))], f[i][j] + c[i + ]);
}
for (int i = ; i < ( << k); i++)
if (f[n][i] <= m) return ;
return ;
} int main()
{
freopen("cover.in", "r", stdin);
freopen("cover.out", "w", stdout);
Init();
l = , r = 1e8;
while(l < r)
{
int mid = (l + r + ) / ;
if (check(mid)) l = mid;
else r = mid - ;
}
printf("%d", l);
}

JZOJ 3521. 道路覆盖的更多相关文章

  1. [jzoj]3521.道路覆盖(cover)

    Link https://jzoj.net/senior/#main/show/3521 Description Tar把一段凹凸不平的路分成了高度不同的N段,并用H[i]表示第i段高度.现在Tar一 ...

  2. 刷题总结——道路覆盖(ssoj)

    题目: 题目描述 Tar 把一段凹凸不平的路分成了高度不同的 N 段(每一段相同高度),并用 H[i] 表示第 i 段高度.现在 Tar 一共有 n 种泥土可用,它们都能覆盖给定的连续的 k 个部分. ...

  3. [JZOJ3521]道路覆盖--状压DP

    题目链接 略略略 分析 首先一看到使得最低的高度最高就想到了二分,于是就转化成了一个是否可行的问题 发现这个\(k\)都很小,考虑使用状态压缩DP 但是我一开始发现似乎并不好设计状态...如果这个\( ...

  4. [JZOJ NOIP2018模拟10.20 B组]

    T1:原根(math) 题目链接: http://172.16.0.132/senior/#contest/show/2532/0 题目: 题解: 一个数m原根的个数是$\phi{(\phi{(m)} ...

  5. SOSO街景地图 API (Javascript)开发教程(1)- 街景

    SOSO街景地图 Javascript API 干什么用的? 你想在网页里嵌入个地图,就需要它了! 另外,它还支持:地点搜索.周边/附近查询.地图标注.公交/驾车路线规划.地理坐标与地址相互转换.地理 ...

  6. reshape2包--R高效数据处理包

    介绍如何使用reshape2包将宽型数据转换成长型数据,将长型数据转换成宽型数据.Reshape2是Hadley Wickham开发和维护的. 1.长数据VS宽数据 宽型数据:每列代表一个不同的变量. ...

  7. 街景地图 API

    SOSO街景地图 API (Javascript)开发教程(1)- 街景   SOSO街景地图 Javascript API 干什么用的? 你想在网页里嵌入个地图,就需要它了! 另外,它还支持:地点搜 ...

  8. 2017.07.07【NOIP提高组】模拟赛B组

    Summary 因为某种无法抗拒的原因,今天没有打比赛,所以也就没有那种心态.今天的题目有状压DP和二分,这套题不难也不简单,适中,适合我这种渣渣来做.在改题时,发现了许多问题.我连欧拉函数的计算都记 ...

  9. zz《百度地图商业选址》

    作者 | 阚长城 编辑 | 张慧芳 题图 | 站酷海阔 人类几千年的文明催生了城市的发展,计算机与复杂科学带给我们新的资源——大数据.罗马非一日建成,人力和时间成本极大,但试想一下,如果有了大数据,罗 ...

随机推荐

  1. postMessage解决跨域跨窗口消息传递

    平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经常会遇到的问题 页面和其打开的新窗口的数据传递 页面与嵌套的iframe消息传递 这些问题都有一些解决办法,但html5引入的mes ...

  2. C# WinForm拖入文件到窗体,得到文件路径

    private void textBox1_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataForma ...

  3. xml schema数据类型

    1.简单数据类型 (1)内置简单数据类型 schema中定义了一些简单数据类型,包括primitive原始数据类型和derived派生数据类型,这些类型都是schema中使用的 最基本的数据类型,我们 ...

  4. hystrix应用介绍(四)

    前几章已经讲了hystrix的应用场景,以及如何使用,本章我们针对如何进行hystrix参数配置做一些分析 //异步的执行 @HystrixCommand(groupKey = "testK ...

  5. JVM:java类的加载机制

    原文连接:https://www.cnblogs.com/ityouknow/p/5603287.html 类加载机制的奥妙. 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读 ...

  6. c# 父类的引用指向子类的实例

    在C#中关于父类对子类的引用大概有这么几种: 父类是接口,普通类,抽象类 public interface A { void a(); } public class B { public void b ...

  7. intellijidea课程 intellijidea神器使用技巧2-1 无处不在的跳转

    idea快捷键(基于windows平台) 1 书签跳转 Ctrl alt [ ]   ==> 项目之间的跳转 Ctrl shift E ==> 文件之间的跳转(最近编辑的文件) Ctrl ...

  8. codevs 1213 解的个数

    1213 解的个数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold       题目描述 Description 已知整数x,y满足如下面的条件: ax+by+c = ...

  9. Struts1.x 基本原理及注册模块的实现

    1.编写JavaBean:User,必须继承于ActionForm类 package myuser; import org.apache.struts.action.ActionForm; publi ...

  10. C#正则表达式获取网址的域名(IP)

    代码如下: string p = @"(http|https)://(?<domain>[^(:|/]*)"; Regex reg = new Regex(p, Reg ...