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 ...
随机推荐
- 【android开发】使用PopupWindow实现页面点击顶部弹出下拉菜单
没有太多花样,也没有很复杂的技术,就是简单的PopupWindow的使用,可以实现点击弹出一个自定义的view,view里可以随便设计,常用的可以放一个listview. demo中我只是一个点击展示 ...
- 《开源框架那点事儿23》:採用TinyDB组件方式开发
採用TinyDB组件方式开发 步骤 Icon 前文介绍四则运算的流程编程开发时,说过流程编排在开发反复功能时.能够利用已有的组件库高速开发.对于开发者而言仅仅须要简单配置流程就能够完毕工作了.开发增删 ...
- JEECG 简单实例讲解权限控制
业务背景:某公司要实现一个日志系统,用来了解员工的工作量饱和情况. 需求: 1.角色分为:员工.经理 两种. 2.员工每天在日志系统中填报工作总结,然后经理进行点评. 3.表单内容包含:姓名.日期.工 ...
- CentOS Linux防火墙配置及关闭
CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service iptables status< ...
- 第7章 Iptables与Firewalld防火墙。
第7章 Iptables与Firewalld防火墙. Chapter7_听较强节奏的音乐能够让您更长时间的投入在学习中. <Linux就该这么学> 00:00/00:00 ...
- 01、Windows Phone 套接字(Socket)实战之交互设计
这个 Demo 主要使用 WP 中提供的 Socket 对象,来与 PC 端进行文字.文件的互相传输.因为在 WP 中系统 对存储的操作限制的比较多,例如,你把 .doc..txt..zip 等常见的 ...
- pre 标签的使用
1.在 div为contenteditable = true 中: 换行显示:就使用了pre 标签: 避免了/n 和空格的转换:实现了ctrl + enter 换行:显示的问题: 2.如何超过了div ...
- iTunes历史各个版本下载地址
地址:http://www.oldapps.com/itunes.php
- Bootstrap学习笔记(5)--实现Bootstrap导航条可点击和鼠标悬停显示下拉菜单
实现Bootstrap导航条可点击和鼠标悬停显示下拉菜单 微笑的鱼 2014-01-03 Bootstrap 5,281 次围观 11条评论 使用Bootstrap导航条组件时,如果你的导航条带有下拉 ...
- Android开发之Fragment传递參数的几种方法
Fragment在Android3.0開始提供,而且在兼容包中也提供了Fragment特性的支持. Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自己定义Fragmen ...