博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
caioj 1066 动态规划入门(一维一边推4:护卫队)(分组型dp总结)
阅读量:6441 次
发布时间:2019-06-23

本文共 853 字,大约阅读时间需要 2 分钟。

很容易想到f[i]为前i项的最优价值,但是我一直在纠结如果重量满了该怎么办。

正解有点枚举的味道。

就是枚举当前这辆车与这辆车以前的组合一组,在能组的里面取最优的。

然后要记得初始化,因为有min,所以除0外初始化为最大,f[0] = 0

这实际上可以抽象出一种模型,就是一个区间线性分组的模型,都可以用这道题的方法写。

#include
#include
#include
#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;typedef long long ll;const int MAXN = 1123;double v[MAXN], f[MAXN];int w, len, n;ll a[MAXN];int main(){ scanf("%d%d%d", &w, &len, &n); REP(i, 1, n + 1) { int x, y; scanf("%d%d", &x, &y); a[i] = a[i - 1] + x; v[i] = len / (double)y * 60.0; } f[0] = 0.0; REP(i, 1, n + 1) { f[i] = 999999999999999.0; //一定要开很大,否则WA double t = 0; for(int j = i; j >= 1; j--) { if(a[i] - a[j - 1] > w) break; t = fmax(t, v[j]); f[i] = fmin(f[i], f[j - 1] + t); } } printf("%.1lf\n", f[n]); return 0; }

 

转载于:https://www.cnblogs.com/sugewud/p/9819433.html

你可能感兴趣的文章
Mysql-高性能索引
查看>>
chrome浏览器最小字号解决方案
查看>>
富文本编译器UEditor+SSM的使用
查看>>
Java EE之旅02 CSS基础
查看>>
kubernetes学习笔记 (二):k8s初体验
查看>>
swift3 0 流控制
查看>>
Data-Mediator专题之属性回调
查看>>
每天一个Linux命令之ps-查看系统进程信息
查看>>
图解JavaScript原型链继承
查看>>
用VIPER构建iOS应用
查看>>
Java开源诊断工具 Arthas 发布v3.1.0
查看>>
什么是以太坊
查看>>
高效开发者是如何个性化VS Code插件与配置的?
查看>>
Java日志那些事
查看>>
117. Populating Next Right Pointers in Each Node II
查看>>
【笔记】重学前端-winter
查看>>
大数据构建模块:选择体系结构和开源框架
查看>>
62. Unique Paths
查看>>
告诉你微信域名被封的原因和防封方案
查看>>
七个你没用过的炫酷开发工具推荐
查看>>