题目链接:https://www.luogu.org/problemnew/show/P1850

难的不在状态上,难在转移方程。

(话说方程写错居然还有84分= =)

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
const ll maxn = 2010;
ll n, m, v, e, c[maxn], d[maxn], u[maxn][maxn], a, b, w;
double k[maxn], l[maxn], dp[maxn][maxn][2], ans = 1e9;
int main()
{
//freopen("change.in","r",stdin);
ios::sync_with_stdio(false);
memset(u, 63, sizeof(u));
memset(dp, 127, sizeof(dp));
cin>>n>>m>>v>>e;
for(ll i = 1; i <= n; i++)
cin>>c[i];
for(ll i = 1; i <= n; i++)
cin>>d[i];
for(ll i = 1; i <= n; i++)
{cin>>k[i]; l[i] = 1-k[i];}
for(ll i = 1; i <= e; i++)
{
cin>>a>>b>>w;
u[a][b] = min(w, u[a][b]);
u[b][a] = min(w, u[b][a]);
}
for(ll q = 1; q <= v; q++)
for(ll i = 1; i <= v; i++)
for(ll j = 1; j <= v; j++)
if(i != q && j != q && i != j) u[i][j] = min(u[i][j], u[i][q] + u[q][j]);
for(ll i = 1; i <= v; i++) u[i][i] = u[i][0] = u[0][i] = 0;
dp[1][0][0] = dp[1][1][1] = 0;
for(ll i = 2; i <= n; i++)
{
ll x1 = c[i], x2 = c[i-1], y1 = d[i], y2 = d[i-1];
dp[i][0][0] = dp[i-1][0][0] + u[x2][x1];
for(ll j = 0; j <= min(i, m); j++)
{
dp[i][j][0] = min(dp[i][j][0], min(dp[i-1][j][0] + u[x2][x1], dp[i-1][j][1] + l[i-1] * u[x2][x1] + k[i-1] * u[y2][x1]));
dp[i][j][1] = min(dp[i][j][1], min(dp[i-1][j-1][0] + u[x2][x1] * l[i] + u[x2][y1] * k[i], dp[i-1][j-1][1] + k[i-1] * l[i] * u[y2][x1] + l[i] * l[i-1] * u[x2][x1] + k[i] * k[i-1] * u[y2][y1] + l[i-1] * k[i] * u[x2][y1]));
}
}
for(ll i = 0; i <= m; i++)
ans = min(ans, min(dp[n][i][0], dp[n][i][1]));
printf("%0.2lf",ans);
return 0;
}

最新文章

  1. 日货EmEditor的使用小技巧
  2. Jackson轻易转换JSON
  3. 深入剖析阿里巴巴云梯YARN集群
  4. &lt;译&gt;Selenium Python Bindings 3 - Navigating
  5. Kruskal求最小生成树
  6. AutoDesk Forge 获取令牌认证
  7. Java基础:内存模型
  8. JAVA进阶10
  9. C++ thread类多线程编程
  10. iOS UIViewController生命周期控制
  11. html5-增强的表单
  12. Python 私有变量中两个下划线 _ _item 与 一个下划线的区别 _item
  13. 解析分布式锁之Zookeeper实现(一)
  14. 小峰mybatis(4)mybatis使用注解配置sql映射器
  15. TensorFlow入门之MNIST最佳实践
  16. 基于Laravel开发博客应用系列 —— 构建博客后台管理系统
  17. 如何打一手好Log
  18. windows phone 应用提交商店失败总结
  19. BZOJ 1878 hh的项链(简单莫队)
  20. Unix I/O--输入/输出(I/O) : 是指主存和外部设备(如磁盘,终端,网络)之间拷贝数据过程

热门文章

  1. 自己写的一个nodejs查找文件模块-node-find-all-files
  2. 关于StringBuffe()长度和初始化长度的问题归纳
  3. 原生Ajax(XMLHttpRequest)
  4. reac——父组件向子组件传递值,子组件何时能同步获得父组件改变后的值
  5. c# 序列化接口(转载贴)
  6. C++学习笔记(7)----类的数组中构造函数和析构函数的调用顺序
  7. Head First HTML和CSS(一)
  8. vs的一个奇葩错误 : 未能找到任何适合于指定的区域性或非特定区域性的资源...
  9. 浅谈count(*)、count(1)、count(列名)
  10. JavaScript 使用HTML DOM的oninput事件,实时监听value值变化