Codeforces 313D Ilya and Roads 题解
来源:互联网 发布:ubuntu netstat不存在 编辑:程序博客网 时间:2024/05/18 03:02
题意
给定若干线段,每条线段可以覆盖一个连续整数区间,需要付出一定代价,问至少覆盖k个整数最少需要付出多少代价
思路
区间dp,在读入线段的时候,对连续一段区间的代价进行记录与更新,然后做区间dp,dp[i][j]表示到i为止覆盖j个区间需要付出的最小代价,dp[i][j]=max(dp[i][j],dp[i][k]+a[i-k+1][i]),a数组就是提前处理出的连续区间的代价,最后dp[n][k]就是答案
代码
#include <cstdio>#define INF 1000000000000000000LLlong long co[301][301],ans[301][301];int main(){ long long n,m,k,l,r,c; scanf("%I64d%I64d%I64d",&n,&m,&k); for(long long i=0;i<=n;i++) for(long long j=1;j<=n;j++) { co[i][j]=INF; ans[i][j]=INF; } for(long long i=0;i<m;i++) { scanf("%I64d%I64d%I64d",&l,&r,&c); for(long long j=l;j<=r;j++) if(co[l][j]>c) co[l][j]=c; } for(long long i=1;i<=n;i++) for(long long j=1;j<=k&&j<=i;j++) { ans[i][j]=ans[i-1][j]; for(long long kk=1;kk<=j;kk++) if(ans[i][j]>ans[i-kk][j-kk]+co[i-kk+1][i]) ans[i][j]=ans[i-kk][j-kk]+co[i-kk+1][i]; } if(ans[n][k]!=INF) printf("%I64d\n",ans[n][k]); else printf("-1\n"); return 0;}
阅读全文
0 0
- Codeforces 313D Ilya and Roads 题解
- Codeforces 313D- Ilya and Roads
- codeforces 313D Ilya and Roads (区间dp)
- Codeforces 313D Ilya and Roads【Dp+思维】
- codeforces 303 D. Ilya and Roads(动态规划)
- Codeforces Round #186 (Div. 2)---D. Ilya and Roads
- Codeforces #186(div 2)D. Ilya and Roads
- Codeforces Round #186 (Div. 2) D Ilya and Roads DP 单调优化
- codeforces 518D Ilya and Escalator
- Codeforces 518D Ilya and Escalator
- codeforces 518D D. Ilya and Escalator(概率dp)
- Codeforces 567E President and Roads 题解
- codeforces 313A - Ilya and Bank Account
- codeforces 313B Ilya and Queries
- codeforces 313C. Ilya and Matrix
- Codeforces 313B Ilya and Queries
- Codeforces 313B : Ilya and Queries
- CodeForces-313A Ilya and Bank Account
- 如何使用万能地图下载器下载矢量路网
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.4基本类型与运算(4.4.1)
- Android多进程IPC机制——binder原理探索
- Android MediaPlayer的简单使用(二)
- 线程死锁
- Codeforces 313D Ilya and Roads 题解
- 中断线程
- 前后端性能优化
- Codeforces
- 查找深层次的子节点
- 数据挖掘关联分析中的支持度、置信度和提升度
- JAVA学习笔记——Random类
- 载波相位测量值
- 【Deep Learning】地表覆盖相关图片下载(谷歌地球、Python代码)