纠结的一道dp。

状态转移方程还是比较好想的,优化比较纠结

                          D. Ilya and Roads
time limit per test

3 seconds

memory limit per test

256 megabytes

input

standard input

output

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.

Input

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).

Output

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.

Sample test(s)
input
  1. 10 4 6
    7 9 11
    6 9 13
    7 7 7
    3 5 6
output
  1. 17
input
  1. 10 7 1
    3 4 15
    8 9 8
    5 6 8
    9 10 6
    1 4 2
    1 4 10
    8 10 13
output
  1. 2
input
  1. 10 1 9
    5 10 14
output
  1. -1
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <algorithm>
  5. #include <math.h>
  6. #include <map>
  7. #include <queue>
  8. #include <sstream>
  9. #include <iostream>
  10. using namespace std;
  11. #define INF 0x3fffffffffff
  12.  
  13. typedef __int64 LL;
  14.  
  15. struct node
  16. {
  17. int x,y,w;
  18. }g[];
  19.  
  20. int n,m,k;
  21. LL dp[][];
  22. LL get[][];
  23. LL mx[];
  24.  
  25. int cmp(node t,node t1)
  26. {
  27. if(t.x!=t1.x)
  28. return t.x<t1.x;
  29. return t.y>t1.y;
  30. }
  31.  
  32. //真的如此碉炸天
  33.  
  34. int main()
  35. {
  36. //freopen("//home//chen//Desktop//ACM//in.text","r",stdin);
  37. //freopen("//home//chen//Desktop//ACM//out.text","w",stdout);
  38. scanf("%d%d%d",&n,&m,&k);
  39. for(int i=;i<;i++)
  40. for(int j=;j<;j++)
  41. dp[i][j]=INF;
  42. memset(get,,sizeof(get));
  43. memset(g,,sizeof(g));
  44. for(int i=;i<m;i++)
  45. {
  46. scanf("%d%d%d",&g[i].x,&g[i].y,&g[i].w);
  47. g[i].y=g[i].y-g[i].x;
  48. }
  49. sort(g,g+m,cmp);
  50. int i=,j=;
  51. LL mi = INF;
  52. int tmp;
  53. while( i <= n )
  54. {
  55. mi=INF;
  56. tmp=n;
  57. while(g[j].x == i)
  58. {
  59. for(int i1=tmp;i1>=g[j].y;i1--)
  60. get[i][i1]=mi;
  61. tmp=g[j].y;
  62. mi=min(mi,(__int64)g[j].w);
  63. j++;
  64. }
  65. for(int i1=tmp;i1>=;i1--)
  66. get[i][i1]=mi;
  67. i++;
  68. }
  69. for(i=;i<=k;i++)
  70. mx[i]=INF; // 0个的时候,不需要w
  71. // 很好的dp压缩!
  72. for(i=;i<=n;i++)
  73. {
  74. if(get[i][]!=INF)
  75. {
  76. for(j=;j <k;j++)
  77. {
  78. for(int i1=;i1+j<k;i1++)
  79. dp[i+j][i1+j+]=min(dp[i+j][i1+j+],mx[i1]+get[i][j]); //纠结的状态转移方程!
  80. }
  81. }
  82. for(j=;j<=k;j++)
  83. {
  84. mx[j]=min(mx[j],dp[i][j]); // 每一个都是独立的!
  85. dp[i][j]=mx[j];
  86. }
  87. }
  88. if(mx[k]==INF)
  89. printf("-1");
  90. else
  91. printf("%I64d",mx[k]);
  92. return ;
  93. }

Codeforces Round #186 (Div. 2).D的更多相关文章

  1. 递推 Codeforces Round #186 (Div. 2) B. Ilya and Queries

    题目传送门 /* 递推:用cnt记录前缀值,查询区间时,两个区间相减 */ #include <cstdio> #include <algorithm> #include &l ...

  2. [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 ...

  3. [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 ...

  4. Codeforces Round #186 (Div. 2)

    A. Ilya and Bank Account 模拟. B. Ilya and Queries 前缀和. C. Ilya and Matrix 考虑每个元素的贡献. 边长为\(2^n\)时,贡献为最 ...

  5. 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 ...

  6. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  7. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  8. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  9. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

随机推荐

  1. HDU 4280Island Transport(网络流之最大流)

    题目地址:pid=4280">http://acm.hdu.edu.cn/showproblem.php? pid=4280 这个题是一个纯最大流模板题..就是用来卡时间的.. 还好我 ...

  2. WPF 流文档

    WPF文本显示: WPF面向的是UI展现,而文本显示无疑是UI层中的重要功能之中的一个.WPF提供了XPS (XML 文件规范) 和Flow Document (流文档) 来在不同的场景下展现或者操作 ...

  3. substr.js 字符串切割

    substr.js 字符串切割 GitHub 以一个中文字的宽度为一个单位进行字符串切割 substr('南拳的妈妈1992', 4) // => 南拳的妈... substr('imliane ...

  4. MS SQL表字段自增相关的脚本

    --查询表是否有自增字段 SELECT OBJECTPROPERTY(OBJECT_ID('[表名]'), 'TableHasIdentity') --查询表的自增字段 SELECT COLUMN_N ...

  5. Redis集群搭建问题汇总

    环境 centos7+redis3.2.12 redis requires Ruby version >= 2.2.2. redis官方提供了redis-trib.rb工具,但是在使用之前 需要 ...

  6. scikit-learn:在实际项目中用到过的知识点(总结)

    零.全部项目通用的: http://blog.csdn.net/mmc2015/article/details/46851245(数据集格式和预測器) http://blog.csdn.net/mmc ...

  7. 相似微信的ChattingUi

    先看主页面布局 activity_imitate_weixin_main.xml <RelativeLayout xmlns:android="http://schemas.andro ...

  8. nginx rewrite目录对换

    /123/xxx----->xxx?id=123 [root@web01 default]# pwd /app/www/default [root@web01 └── sss └── index ...

  9. java中==和equals和hashcode的区别详解

    一.相同点 都是用来进行值或对象的比较. 二.不同点 对于“==”而言,对于基本类型(char,byte,short,int,long,float,double,boolean),对比的是值,所以是相 ...

  10. quick cocos2d-x 2.2.4 window环境调试

    BabeLua简介 BabeLua是一款基于VS2012/2013(简称VS)的免费开源的Lua集成开发环境,在Lua编辑和调试方面,具有如下功能和特性: ●Lua语法高亮 ●语法检查 ●自动补全 ● ...