BZOJ4720——[Noip2016]换教室
来源:互联网 发布:英雄联盟网吧特权软件 编辑:程序博客网 时间:2024/05/15 23:44
1、题意:给你一个无向图,你有一个序列a,长度定义为从序列的第一个点开始按照序列中的点一个一个的到达所需要的最短距离和。还有另外一个序列b,你可以用
2、分析:神tm强行添加floyd..
#include <map>#include <set>#include <cmath>#include <queue>#include <vector>#include <bitset>#include <string>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define M 1000010#define LL long long#define MOD 1000000007#define inf 1047483647#define llinf 4000000000000000000ll#define For(i, x, y) for(int i = (x); i < (y); i ++)#define rep(i, x, y) for(int i = (x); i <= (y); i ++)#define drep(i, x, y) for(int i = (x); i >= (y); i --)inline int read(){ char ch=getchar();int x=0,f=1; while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}inline LL llread(){ char ch=getchar();LL x=0,f=1; while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int a[2010][2]; double ki[2010][2];int dis[310][310];double f[2010][2010][2];int main(){ //freopen("classroom.in", "r", stdin); //freopen("classroom.out", "w", stdout); int n = read(), m = read(), v = read(), e = read(); rep(j, 0, 1) rep(i, 1, n) a[i][j] = read(); rep(i, 1, n) scanf("%lf", &ki[i][1]), ki[i][0] = 1.0 - ki[i][1]; rep(i, 1, v) rep(j, 1, v) if(i != j) dis[i][j] = inf; while(e --){ int u = read(), v = read(), w = read(); dis[u][v] = dis[v][u] = min(dis[u][v], w); } rep(k, 1, v) rep(i, 1, v) rep(j, 1, v){ dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]); } rep(i, 0, n) rep(j, 0, n) rep(k, 0, 1) f[i][j][k] = 2047483647.0; f[0][0][0] = 0; rep(i, 1, n){ int upp = min(i, m); rep(j, 0, upp){ int dis_00 = dis[a[i-1][0]][a[i][0]]; int dis_01 = dis[a[i-1][0]][a[i][1]]; int dis_10 = dis[a[i-1][1]][a[i][0]]; int dis_11 = dis[a[i-1][1]][a[i][1]]; double dtod = dis_00; double dtoz = ki[i][1]*dis_01+ki[i][0]*dis_00; double ztod = ki[i-1][1]*dis_10+ki[i-1][0]*dis_00; double ztoz = ztod*ki[i][0]+(ki[i-1][1]*dis_11+ki[i-1][0]*dis_01)*ki[i][1]; f[i][j][0] = min(f[i-1][j][0]+dtod, f[i-1][j][1]+ztod); if(j) f[i][j][1] = min(f[i-1][j-1][0]+dtoz, f[i-1][j-1][1]+ztoz); } } double ans = 2047483647.0; rep(j, 0, min(n, m)) rep(k, 0, 1){ ans = min(ans, f[n][j][k]); // printf("%.2lf\n", f[n][j][k]); } printf("%.2lf", ans); return 0;}
0 0
- BZOJ4720——[Noip2016]换教室
- BZOJ4720 [Noip2016]换教室
- bzoj4720 [Noip2016]换教室
- bzoj4720: [Noip2016]换教室
- bzoj4720 [Noip2016]换教室
- BZOJ4720(NOIP2016)[换教室]题解--期望DP
- [bzoj4720][Noip2016]换教室 签到概率DP
- [BZOJ4720][NOIP2016]换教室-期望DP
- 【期望DP+最短路】BZOJ4720 [NOIP2016]换教室
- bzoj4720 [NOIP2016] 换教室(期望概率DP)
- BZOJ4720 [Noip2016]换教室 解题报告【SPFA】【期望DP】
- BZOJ 4720 [Noip2016]换教室——期望DP
- [NOIP2016]换教室
- [NOIP2016] 换教室
- 【noip2016】换教室 题解
- NOIP2016 换教室
- NOIP2016换教室
- NOIP2016 T3 换教室
- <c:forEach> 标签的var 属性和varStatus属性的区别
- HDU 1008 Elevator 水题
- 【一点一点写算法】排序算法开头
- 学习笔记之--JAVA IO流
- Jsp 使用 fileupload 文件上传和下载
- BZOJ4720——[Noip2016]换教室
- JavaBean与Expression Language
- SQLite所遇到的坑
- 总结62
- C++从入门到放弃
- 剑指offer——面试题24:二叉搜索树的后序遍历序列
- KVM 虚拟化原理探究— overview
- 删除字符串中相同的元素
- CCF-模板生成系统