这道题目是不太好想的,尽管很容易看出来应该是dp,但是状态转移总觉得无从下手。

其实我们可以将状态分层,比如设$dp(i, j)$为用$i$个路由器覆盖前$j$个点所需的最小代价

我们先不考虑状态,而是考虑在每个位置上的决策对状态的影响,考虑在位置j的决策

1.如果在此处放置网线,有$dp(i, j) = min(dp(i, j), dp(i, j - 1) + b(i))$

2.如果在此处放置路由器,有$dp(i, r(j)) = min(dp(i, r(j)), dp(i - 1, l(j) - 1) + a(i))$

当然此处可以什么都不放,但是这种决策对状态没有影响,因此我们不考虑它。

$[l(i), r(i)]$表示$i$位置路由器的覆盖区间

注意到固定$i$,$dp(i, j)$应该是非降的,因此条件2的更新应该适用于所有$dp(i, k): k \leq r(j)$

用两重循环依次计算状态,用stl中的vector储存i位置满足$r(k) = i$的所有$k$,先用式2从后往前更新,再用式1从前往后更新即可

复杂度$O(n * max(k, log(n))$

代码如下:

 #include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
#include <map>
#include <set>
#include <ctime>
#include <iostream>
using namespace std;
typedef long long ll;
const int int_inf = 0x3f3f3f3f;
const ll ll_inf = (ll) << ;
const int mod = 1e9 + ;
const double double_inf = 1e30;
typedef unsigned long long ul;
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
#define mp make_pair
#define st first
#define nd second
#define lson (u << 1)
#define rson (u << 1 | 1)
#define pii pair<int, int>
#define pb push_back
#define type(x) __typeof(x.begin())
#define foreach(i, j) for(type(j)i = j.begin(); i != j.end(); i++)
#define FOR(i, s, t) for(int i = s; i <= t; i++)
#define ROF(i, t, s) for(int i = t; i >= s; i--)
#define dbg(x) cout << x << endl
#define dbg2(x, y) cout << x << " " << y << endl
#define clr(x, i) memset(x, (i), sizeof(x))
#define maximize(x, y) x = max((x), (y))
#define minimize(x, y) x = min((x), (y))
inline int readint(){
bool neg = ; char ch, t[];
int k = ;
while((ch = getchar()) == ' ' || ch == '\n') ;
neg = ch == '-';
ch == '-' ? neg = : t[k++] = ch;
while((ch = getchar()) >= '' && ch <= '') t[k++] = ch;
int x = , y = ;
while(k) x += (t[--k] - '') * y, y *= ;
return neg ? -x : x;
} inline int readstr(char *s){
char ch;
int len = ;
while((ch = getchar()) == ' ' || ch == '\n') ;
*(s++) = ch, ++len;
while((ch = getchar()) != ' ' && ch != '\n') *(s++) = ch, ++len;
*s = '\0';
return len;
}
inline void writestr(const char *s){
while(*s != '\0') putchar(*(s++));
putchar('\n');
} inline int add(int x, int y){
if(x < ) x += mod;
if(y < ) y += mod;
return (x + y) % mod;
} inline int mult(int x, int y){
if(x < ) x += mod;
if(y < ) y += mod;
ll tem = (ll)x * y;
return tem % mod;
} int debug = ;
//-------------------------------------------------------------------------
const int maxn = 2e4 + ;
int a[maxn], x[maxn], b[maxn], d[maxn];
ll dp[][maxn];
vector<int> c[maxn];
int l[maxn], r[maxn];
int n, k;
//------------------------------------------------------------------------- ll solve(){
d[] = d[] = ;
FOR(i, , n) d[i] += d[i - ];
FOR(i, , maxn - ) c[i].clear();
FOR(i, , n){
int len = x[i];
int L = , R = i;
while(R - L > ){
int mid = (R + L) >> ;
if(d[i] - d[mid] <= len) R = mid;
else L = mid;
}
l[i] = R;
L = i, R = n + ;
while(R - L > ){
int mid = (R + L) >> ;
if(d[mid] - d[i] <= len) L = mid;
else R = mid;
}
r[i] = L;
c[L].pb(i);
}
dp[][] = ;
FOR(i, , n) dp[][i] = dp[][i - ] + b[i];
FOR(i, , k){
dp[i][n + ] = ll_inf;
ROF(j, n, ){
int sz = c[j].size();
dp[i][j] = dp[i][j + ];
FOR(u, , sz - ) minimize(dp[i][j], dp[i - ][l[c[j][u]] - ] + a[c[j][u]]);
}
dp[i][] = ;
FOR(j, , n) minimize(dp[i][j], dp[i][j - ] + b[j]);
}
ll ans = dp[][n];
FOR(i, , k) minimize(ans, dp[i][n]);
return ans;
} int main(){
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(debug) freopen("in.txt", "r", stdin);
int T = readint();
while(T--){
n = readint();
k = readint();
FOR(i, , n - ) d[i + ] = readint();
FOR(i, , n) a[i] = readint(), x[i] = readint(), b[i] = readint();
ll ans = solve();
printf("%lld\n", ans);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
return ;
}

hdu5681 zxa and wifi的更多相关文章

  1. hdu-5681 zxa and wifi(dp)

    题目链接: zxa and wifi Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Othe ...

  2. 【1】记一次破解wifi

    当然,使用的依旧是aircrack套件,这次依旧是跑字典,今天,捉到了另一个实验室icephone的wpa握手包,我猜测实验室的wifi一般都跟自己的名字有关,icephone刚好是8位字母,于是我就 ...

  3. Kali对wifi的破解记录

    好记性不如烂笔头,记录一下. 我是在淘宝买的拓实N87,Kali可以识别,还行. 操作系统:Kali 开始吧. 查看一下网卡的接口.命令如下 airmon-ng 可以看出接口名称是wlan0mon. ...

  4. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

  5. 乐乎环球WiFi

    乐乎环球WiFi招商加盟 随身WiFi设备 乐乎环球Wifi是由北京蔚蓝创智科技有限公司研发的产品,是一款可以在全球100多个国家和地区实现免漫游4G高速上网的随身WiFi设备.和普通MiFi设备相比 ...

  6. 为什么房间的 Wi-Fi 信号这么差

    最近把家里主卧整成了个小影院,由于之前房子装修时网线端口与电源插口布置太少,导致家庭网络架设变得麻烦起来,最后终于通过「无线中继」技术达到了全屋满格 Wi-Fi 的效果. 在 Wi-Fi 架设过程中, ...

  7. win10更新系统后wifi连接不上了怎么解决?

    遇到了一个小问题,由于更新了一下win10,发现wifi不能用了,以为是wifi密码错了,选择忘记密码试了两次,又试了不同的wifi都不行,发现网卡无线驱动也没事,在网上百度了好久发现说的方法都没用, ...

  8. 树莓派 连接wifi与路由器ip绑定

    先推荐几个手机软件 在酷安网里应该能找到 1.JuiceSSH  橘子ssh软件  手机连上路由器 就可以控制局域网内的树莓派 2.VNC Viewer  远程桌面软件VNC 也是连接局域网的树莓派 ...

  9. DOS下windows系统查看wifi密码

    DOS下windows系统查看wifi密码 首先,按win+R键,win键如下 弹出框中输入cmd 在弹出界面输入 netsh wlan show profiles 你可以看到你链接过的所有wifi名 ...

随机推荐

  1. 生成arff文件,csv转为arff

    一.什么是arff格式文件 1.arff是Attribute-Relation File Format缩写,从英文字面也能大概看出什么意思.它是weka数据挖掘开源程序使用的一种文件模式.由于weka ...

  2. redhat centos yum源的安装

    redhat centos yum源的安装 1.除旧 #cd /etc/yum.repos.d #mv rhel-debuginfo.repo rhel-debuginfo.repo.bak 此处将其 ...

  3. ios app 解决微信扫二维码不能跳转问题

    <script> (function(){ // Setup GA (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i ...

  4. PPTP部署文档

    PPTP部署文档 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.       欢迎加入:高级运维工程师之路 598432640 前言:这款VPN部署起来特别简单,想对OPENVON配 ...

  5. Struts2.3+Spring+iBatis 初学之问题判断

    小白接下来将会总结下我再学习Spring的学习过程中(ssi框架)中遇到的问题,以后会不断的进行更新. 最容易犯的问题,就是声明bean的时候,属性引用其他声明的bean的时候,name没有进行好对应 ...

  6. Maven2的配置文件settings.xml(转)

    当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时,我们使用settings.xml中的settings元素来确定这些配置.这包含了本地仓库位置 ...

  7. 11---Net基础加强

    替换邮箱用户名部分: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  8. 夺命雷公狗ThinkPHP项目之----企业网站12之文章添加的实现

    我们现在就开始写文章添加了,居然是添加当然布列外,我们还是要先讲模版搞定再说被: <!doctype html> <html> <head> <meta ch ...

  9. 夺命雷公狗---TP商城----TP之配置环境---1

    下载到tp3.2.3版本后架设到自己的wamp环境下,然后配置虚拟主机,完事后直接开工 环境下创建一个文件夹,然后里面存放这这两个文件即可开始新的旅途了 这里完了,下一步就开始配置index.php文 ...

  10. libSVM的数据格式

    首先介绍一下 libSVM的数据格式 Label 1:value 2:value -. Label:是类别的标识,比如上节train.model中提到的1 -1,你可以自己随意定,比如-10,0,15 ...