首页 > 其他分享 >洛谷P1850 [NOIP2016 提高组] 换教室(期望dp)

洛谷P1850 [NOIP2016 提高组] 换教室(期望dp)

时间:2022-09-03 21:24:06浏览次数:72  
标签:NOIP2016 ci 洛谷 int bi 3005 ai P1850 dp

#include <bits/stdc++.h>
using namespace std;
int n, m, v, e;
int c[3005], d[3005];
int f[305][305];
double dp[3005][3005][2];//dp[i][j][k]表示前i步申请更换了j次且当前是否申请更换的答案
double p[3005];
int main() {
	cin >> n >> m >> v >> e;
	for(int i = 1; i <= n; i++) {
		cin >> c[i];
	}
	for(int i = 1; i <= n; i++) {
		cin >> d[i];
	}
	for(int i = 1; i <= n; i++) {
		cin >> p[i];
	}
	memset(f, 0x3f, sizeof(f));
	for(int i = 1; i <= e; i++) {
		int ai, bi, ci;
		cin >> ai >> bi >> ci;
		f[ai][bi] = f[bi][ai] = min(ci, f[ai][bi]);//防止重边
	}
	for(int k = 1; k <= v; k++) {
		for(int i = 1; i <= v; i++) {
			for(int j = 1; j <= v; j++) {
				f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
			}
		}
	}
	for(int i = 1; i <= v; i++) {
		f[i][i] = 0;//有可能出现c[i - 1] == c[i] 
	}
	for(int i = 0; i <= n; i++) {
		for(int j = 0; j <= m; j++) {
			dp[i][j][0] = dp[i][j][1] = 1e18;
		}
	}
	dp[1][0][0] = dp[1][1][1] = 0;
	for(int i = 2; i <= n; i++) {
		int t1 = f[c[i - 1]][c[i]], t2 = f[c[i - 1]][d[i]], 
		t3 = f[d[i - 1]][c[i]], t4 = f[d[i - 1]][d[i]];
		for(int j = 0; j <= min(m, i); j++) {
			dp[i][j][0] = min(dp[i - 1][j][0] + t1, dp[i - 1][j][1] + t3 * p[i - 1] + t1 * (1 - p[i - 1]));//t3 * p[i - 1] + t1 * (1 - p[i - 1])是因为如果选择换教室的话结果不一定  这里每一项只乘了p[i - 1]是因为当前确定不申请换教室
			if(j) {
				dp[i][j][1] = min(dp[i - 1][j - 1][0] + p[i] * t2 + (1 - p[i]) * t1, dp[i - 1][j - 1][1] + (1 - p[i - 1]) * (1 - p[i]) * t1 + (1 - p[i - 1]) * p[i] * t2 + p[i - 1] * (1 - p[i]) * t3 + p[i - 1] * p[i] * t4);
			}
		}
	}
	double ans = 1e18;
	for(int i = 0; i <= m; i++) {
		ans = min(ans, min(dp[n][i][0], dp[n][i][1]));
	}
	printf("%.2lf", ans);
}

标签:NOIP2016,ci,洛谷,int,bi,3005,ai,P1850,dp
From: https://www.cnblogs.com/lipoicyclic/p/16653678.html

相关文章

  • 洛谷P7907 [Ynoi2005] rmscne
    数据结构好题首先将询问离线,扫描线扫答案区间的左端点。设和\(l\)颜色相同的下一个位置为\(x\)。那么对于左端点\(\leql\),\(l\leq\)右端点$<x$的询问,\(l\)......
  • 洛谷深基hash表
    洛谷深基hash表字符串哈希给定N个字符串(第i个字符串长度为Mi,字符串内包含数字、大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串。我们不妨先分......
  • [洛谷P5787] 线段树时间分治
    题目大意给\(n\)个点\(m\)条边,在\(k\)时间内,第\(i\)条边只在\([l_i+1,r_i]\)的时间范围内存在。对于每个\(i\leqk\),输出\(i\)时刻这个图是否是二分图。题......
  • 学习随笔——洛谷题目P1636解答
    摘要:欧拉图的应用。题目原地址如下:https://www.luogu.com.cn/problem/P1636题目截图如下:  一笔画问题,考察欧拉回路的定义,即所有节点的入度出度的和都为偶数即可满足......
  • 洛谷 P6862 [RC-03] 随机树生成器 绿 题解
    前言模数要模\(1e9+9\)!!模数要模\(1e9+9\)!!模数要模\(1e9+9\)!!结论\(n\)个点的树的形态有\((n-1)!\)个,对于节点\(k\),它的所有度数和为\((n-1)!\left(\sum\limits_{......
  • 洛谷 P8496 [NOI2022] 众数 题解
    最近7年最水的D1T1。用权值线段树维护每个数出现的次数,链表维护序列。操作4即合并两棵权值线段树、两个链表,操作2就是删除链表尾的元素并在权值线段树上修改。显......
  • 洛谷-P5058 嗅探器
    嗅探器tarjan割点考虑以\(a\)作为根进行一次\(tarjan\)的搜索,会发现只有到\(b\)的路径上的割点才有可能是最终的答案因此考虑一边标记这个路径,一边在这个路径上......
  • 洛谷 P2582 函数
    函数-洛谷可以发现性质\(g(f^m(x))=f^m(g(x))\)。若设左侧\(x\)所在环大小为\(size(x)\),右侧\(g(x)\)所在环的大小为\(size(gx)\)。可以得到,\(size(gx)\mid......
  • 洛谷-P3388 【模板】割点(割顶)
    【模板】割点(割顶)tarjan学了一下割点,发现就是找\(low[nex]\gedfn[now]\)的点,同时根的话要求有两个分支才能作为割点搜索的时候如果\(nex\)没有被访问过,则直接继续......
  • 洛谷P1001 A+B problem最全算法
    为防止大家说我误导新人,先放一个最不正常的代码。#include<iostream>usingnamespacestd;intmain(){inta,b;cin>>a>>b;cout<<a+b;ret......