Codeforces Round #186 (Div. 2).D
纠结的一道dp。
状态转移方程还是比较好想的,优化比较纠结
3 seconds
256 megabytes
standard input
standard output
Everything is great about Ilya's city, except the roads. The thing is, the only ZooVille road is represented as n holes in a row. We will consider the holes numbered from 1 to n, from left to right.
Ilya is really keep on helping his city. So, he wants to fix at least k holes (perharps he can fix more) on a single ZooVille road.
The city has m building companies, the i-th company needs ci money units to fix a road segment containing holes with numbers of at least li and at most ri. The companies in ZooVille are very greedy, so, if they fix a segment containing some already fixed holes, they do not decrease the price for fixing the segment.
Determine the minimum money Ilya will need to fix at least k holes.
The first line contains three integers n, m, k (1 ≤ n ≤ 300, 1 ≤ m ≤ 105, 1 ≤ k ≤ n). The next m lines contain the companies' description. The i-th line contains three integers li, ri, ci (1 ≤ li ≤ ri ≤ n, 1 ≤ ci ≤ 109).
Print a single integer — the minimum money Ilya needs to fix at least k holes.
If it is impossible to fix at least k holes, print -1.
Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64dspecifier.
10 4 6
7 9 11
6 9 13
7 7 7
3 5 6
17
10 7 1
3 4 15
8 9 8
5 6 8
9 10 6
1 4 2
1 4 10
8 10 13
2
10 1 9
5 10 14
-1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <map>
#include <queue>
#include <sstream>
#include <iostream>
using namespace std;
#define INF 0x3fffffffffff typedef __int64 LL; struct node
{
int x,y,w;
}g[]; int n,m,k;
LL dp[][];
LL get[][];
LL mx[]; int cmp(node t,node t1)
{
if(t.x!=t1.x)
return t.x<t1.x;
return t.y>t1.y;
} //真的如此碉炸天 int main()
{
//freopen("//home//chen//Desktop//ACM//in.text","r",stdin);
//freopen("//home//chen//Desktop//ACM//out.text","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<;i++)
for(int j=;j<;j++)
dp[i][j]=INF;
memset(get,,sizeof(get));
memset(g,,sizeof(g));
for(int i=;i<m;i++)
{
scanf("%d%d%d",&g[i].x,&g[i].y,&g[i].w);
g[i].y=g[i].y-g[i].x;
}
sort(g,g+m,cmp);
int i=,j=;
LL mi = INF;
int tmp;
while( i <= n )
{
mi=INF;
tmp=n;
while(g[j].x == i)
{
for(int i1=tmp;i1>=g[j].y;i1--)
get[i][i1]=mi;
tmp=g[j].y;
mi=min(mi,(__int64)g[j].w);
j++;
}
for(int i1=tmp;i1>=;i1--)
get[i][i1]=mi;
i++;
}
for(i=;i<=k;i++)
mx[i]=INF; // 0个的时候,不需要w
// 很好的dp压缩!
for(i=;i<=n;i++)
{
if(get[i][]!=INF)
{
for(j=;j <k;j++)
{
for(int i1=;i1+j<k;i1++)
dp[i+j][i1+j+]=min(dp[i+j][i1+j+],mx[i1]+get[i][j]); //纠结的状态转移方程!
}
}
for(j=;j<=k;j++)
{
mx[j]=min(mx[j],dp[i][j]); // 每一个都是独立的!
dp[i][j]=mx[j];
}
}
if(mx[k]==INF)
printf("-1");
else
printf("%I64d",mx[k]);
return ;
}
Codeforces Round #186 (Div. 2).D的更多相关文章
- 递推 Codeforces Round #186 (Div. 2) B. Ilya and Queries
题目传送门 /* 递推:用cnt记录前缀值,查询区间时,两个区间相减 */ #include <cstdio> #include <algorithm> #include &l ...
- [Codeforces Round #186 (Div. 2)] B. Ilya and Queries
B. Ilya and Queries time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- [Codeforces Round #186 (Div. 2)] A. Ilya and Bank Account
A. Ilya and Bank Account time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- Codeforces Round #186 (Div. 2)
A. Ilya and Bank Account 模拟. B. Ilya and Queries 前缀和. C. Ilya and Matrix 考虑每个元素的贡献. 边长为\(2^n\)时,贡献为最 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
随机推荐
- Objective-C中的基本数据类型
// // main.m // 01.基本数据类型 // // Created by zhangqs008 on 14-2-13. // Copyright (c) 2014年 zhangqs008. ...
- mysql远程登录出错的解决方法
mysql远程登录出错的情况,先比很多朋友都有遇到过吧,下面有个不错的解决方法,大家可以参考下. 错误:ERROR 2003 (HY000): Can't connect to MySQL serve ...
- 用于检测进程的shell脚本代码小结
本文介绍一段shell脚本,它可以检测某进程或某服务是否正在运行,然后以邮件通知.有需要的朋友参考下 一个简单的shell脚本,用来找出关键的服务是否正在运行,适用于Linux操作系统或Unix操作系 ...
- # mysqlbinlog mysql-bin.000004 mysqlbinlog: unknown variable 'default-character-set=utf8'
# mysqlbinlog mysql-bin.000004 mysqlbinlog: unknown variable 'default-character-set=utf8' 加上--no-def ...
- 167. Add Two Numbers【easy】
You have two numbers represented by a linked list, where each node contains a single digit. The digi ...
- Android 资源保护问题——探索
apk文件使用解压工具就能看到drawable等资源,但是有些游戏中的图片资源却是无法看到的. 这个问题探索了许久…… [1]图片资源不放置在drawable文件下,放在assets中(但是解压apk ...
- ajax请求数据动态渲染表格
$.ajax({ url: "/flow/userTaskFileShow.cc", data: {"processDefinitionId": pdid, & ...
- groupBox和panel
private void Form1_Load(object sender, EventArgs e) { groupBox1.Text = "信息表"; panel1.Borde ...
- 禁止复制 + 锁右键 + 禁止全选(兼容IE Chrome等)
function iEsc() { return false; }function iRec() { return true; }function DisableKeys() { if (eve ...
- 使用javascript操作cookies的实例
<script> //写cookies函数 作者:翟振凯 function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值 { var Days ...