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 ...
随机推荐
- tsung的配置使用
1.在root下新建.tsung文件,在.tsung文件新建log文件夹..tsung文件用于存放log和xml文件 2.复制/usr/local/tsung/share/doc/tsung/exam ...
- multi-mechanize
1. 安装 万能的pip&easy_install(python27环境) pip install multi-mechanize mechanize numpy matplotlib mec ...
- python --循环对象
转自:http://www.cnblogs.com/vamei/archive/2012/07/09/2582499.html 这一讲的主要目的是为了大家在读Python程序的时候对循环对象有一个基本 ...
- RMAN Recovery Catalog
RMAN用来存放数据库元数据的schema. the catalog includes the following types of metadata:-Data file and archived ...
- C#:依据目录填充树视图
#region 依据目录填充树视图 /// <summary> /// 依据文件夹目录,填充树视图 /// </summary> /// <param name=&quo ...
- SectionIndexer中的getSectionForPosition()与getPositionForSection()解惑
大家在做字母索引的时候常常会用到SectionIndexer这个类,里面有2个重要的方法 1. getSectionForPosition()通过该项的位置,获得所在分类组的索引号 2. ge ...
- Openstack 03 - Nova Compute
1.前言 非常早之前就開始着手写Openstack 系列的博客了,在写了总体架构和Keystone之后,准备写Nova,可是每次写到一半,自己心里就认为不踏实,由于似乎我并没有真正理解Nova,或者说 ...
- [na]office 2010 2013卸载工具
http://www.ithome.com/html/soft/32777.htm Office 2003 || Office 2007 || Office 2010.
- iTunes历史各个版本下载地址
地址:http://www.oldapps.com/itunes.php
- 基于jquery仿360网站图片选项卡切换代码
今天给大家分享一款基于jquery仿360网站图片选项卡切换代码.这款实例适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预 ...