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 ...
随机推荐
- HDU 4280Island Transport(网络流之最大流)
题目地址:pid=4280">http://acm.hdu.edu.cn/showproblem.php? pid=4280 这个题是一个纯最大流模板题..就是用来卡时间的.. 还好我 ...
- WPF 流文档
WPF文本显示: WPF面向的是UI展现,而文本显示无疑是UI层中的重要功能之中的一个.WPF提供了XPS (XML 文件规范) 和Flow Document (流文档) 来在不同的场景下展现或者操作 ...
- substr.js 字符串切割
substr.js 字符串切割 GitHub 以一个中文字的宽度为一个单位进行字符串切割 substr('南拳的妈妈1992', 4) // => 南拳的妈... substr('imliane ...
- MS SQL表字段自增相关的脚本
--查询表是否有自增字段 SELECT OBJECTPROPERTY(OBJECT_ID('[表名]'), 'TableHasIdentity') --查询表的自增字段 SELECT COLUMN_N ...
- Redis集群搭建问题汇总
环境 centos7+redis3.2.12 redis requires Ruby version >= 2.2.2. redis官方提供了redis-trib.rb工具,但是在使用之前 需要 ...
- scikit-learn:在实际项目中用到过的知识点(总结)
零.全部项目通用的: http://blog.csdn.net/mmc2015/article/details/46851245(数据集格式和预測器) http://blog.csdn.net/mmc ...
- 相似微信的ChattingUi
先看主页面布局 activity_imitate_weixin_main.xml <RelativeLayout xmlns:android="http://schemas.andro ...
- nginx rewrite目录对换
/123/xxx----->xxx?id=123 [root@web01 default]# pwd /app/www/default [root@web01 └── sss └── index ...
- java中==和equals和hashcode的区别详解
一.相同点 都是用来进行值或对象的比较. 二.不同点 对于“==”而言,对于基本类型(char,byte,short,int,long,float,double,boolean),对比的是值,所以是相 ...
- quick cocos2d-x 2.2.4 window环境调试
BabeLua简介 BabeLua是一款基于VS2012/2013(简称VS)的免费开源的Lua集成开发环境,在Lua编辑和调试方面,具有如下功能和特性: ●Lua语法高亮 ●语法检查 ●自动补全 ● ...