「CTSC 2011」幸福路径
[「CTSC 2011」幸福路径
蚂蚁是可以无限走下去的,但是题目对于精度是有限定的,只要满足精度就行了.
\({(1-1e-6)}^{2^{25}}=2.6e-15\)
考虑使用倍增的思想.
定义\(dp[x][y][t]\)为从\(x\)点出发,走\(2^t\)步,到达\(y\)所得到的最大权值.
dp转移:\(dp[x][y][t]=max(dp[x][k][t-1]+p^{2^{t-1}} dp[k][y][t-1])\)(\(k \subset [1,n]\)).
一次转移复杂度为\(o(n^3)\).
总复杂度\(o(n^3*K)\),\(K \leq 25\).
#include<bits/stdc++.h>
#define rep(q,a,b) for(int q=a,q##_end_=b;q<=q##_end_;++q)
#define dep(q,a,b) for(int q=a,q##_end_=b;q>=q##_end_;--q)
#define mem(a,b) memset(a,b,sizeof a )
#define debug(a) cerr<<#a<<' '<<a<<"___"<<endl
using namespace std;
void in(int &r) {
	static char c;
	r=0;
	while(c=getchar(),!isdigit(c));
	do r=(r<<1)+(r<<3)+(c^48);
	while(c=getchar(),isdigit(c));
}
bool cur1;
const int mn=105;
const int mm=1005;
int n,m,cnt1,s;
double lp,p;
double val[mn],dp[mn][mn][2];
bool cur2;
int main() {
//	cerr<<(&cur1-&cur2)/1024.0/1024<<endl;
	freopen("path.in","r",stdin);
	freopen("path.out","w",stdout);
	int st;
	scanf("%d%d",&n,&m);
	rep(q,1,n)scanf("%lf",&val[q]);
	scanf("%d%lf",&st,&p);
	int a,b;
	bool ok=1;
	rep(q,1,n)rep(w,1,n)dp[q][w][ok]=-1e9;
	rep(q,1,n)dp[q][q][ok]=0;
	double Mx=0;
	rep(q,1,m) {
		scanf("%d%d",&a,&b);
		dp[a][b][ok]=val[b]*p;
		Mx=max(Mx,dp[a][b][ok]);
	}
	for(int tim=1;tim<=25;++tim){
		if(p*Mx<1e-3)break;
		ok=!ok;
		rep(q,1,n)rep(w,1,n)dp[q][w][ok]=-1e9;
		rep(q,1,n)dp[q][q][ok]=0;
		rep(k,1,n)rep(q,1,n)rep(w,1,n)dp[q][w][ok]=max(dp[q][w][ok],dp[q][k][!ok]+dp[k][w][!ok]*p);
		rep(q,1,n)rep(w,1,n)Mx=max(Mx,dp[q][w][ok]);
		p*=p;
	}
	double ans=0;
	rep(q,1,n)ans=max(ans,dp[st][q][ok]);
	printf("%.1lf\n",val[st]+ans);
	return 0;
}
「CTSC 2011」幸福路径的更多相关文章
- 「CTSC 2011」排列
		「CTSC 2011」排列 要求不存在公差为 A 或者公比为 B 的子列,那么实际上可以把该问题转化为求一个图的最优拓朴序. 任意差为 A 或者比为 B 的两个数连一条边. 求一个合法序列的答案可以用 ... 
- 「BZOJ 2434」「NOI 2011」阿狸的打字机「AC自动机」
		题意 有一个打字机,支持三种操作: 字符串末尾加一个小写字母 字符串末尾减一个字符 输出这个字符串 经过不超过\(n\)次操作后有\(m\)组询问:\((x,y)\),表示第\(x\)次输出第字符串在 ... 
- 「BZOJ 2342」「SHOI 2011」双倍回文「Manacher」
		题意 记\(s_R\)为\(s\)翻转后的串,求一个串最长的形如\(ss_Rss_R\)的子串长度 题解 这有一个复杂度明显\(O(n)\)的做法,思路来自网上某篇博客 一个双倍回文串肯定当且仅当本身 ... 
- 「CTSC 2008」祭祀
		题目链接 戳我 \(Solution\) 第一问 这道题要知道一个叫做\(Dilworth\)的定理 最长反链\(=\)最小链覆盖 证明(\(from\ r\_64\)): 所以我们只要求一个最小链覆 ... 
- 「BalticOI 2011」Switch the Lamp On
		Casper is designing an electronic circuit on a \(N \times M\) rectangular grid plate. There are \(N ... 
- 「CTSC 2013」组合子逻辑
		Tag 堆,贪心 Description 给出一个数列 \(n\) 个数,一开始有一个括号包含 \([1,n]\),你需要加一些括号,使得每个括号(包括一开始的)所包含的元素个数 \(\leq\) 这 ... 
- Solution -「POI 2011」「洛谷 P3527」MET-Meteors
		\(\mathcal{Description}\) Link. 给定一个大小为 \(n\) 的环,每个结点有一个所属国家.\(k\) 次事件,每次对 \([l,r]\) 区间上的每个点点权加上 ... 
- Solution -「CTSC 2018」「洛谷 P4602」混合果汁
		\(\mathcal{Description}\) Link. \(n\) 种果汁,第 \(i\) 种美味度为 \(d_i\),每升价格 \(p_i\),一共 \(l_i\) 升.\(m\) ... 
- LOJ6002 - 「网络流 24 题」最小路径覆盖
		原题链接 Description 求一个DAG的最小路径覆盖,并输出一种方案. Solution 模板题啦~ Code //「网络流 24 题」最小路径覆盖 #include <cstdio&g ... 
随机推荐
- Accelerating Deep Learning by Focusing on the Biggest Losers
			目录 概 相关工作 主要内容 代码 Accelerating Deep Learning by Focusing on the Biggest Losers 概 思想很简单, 在训练网络的时候, 每个 ... 
- Python Revisited Day 09 (调试、测试与Profiling)
			目录 9.1 调试 9.1.1 处理语法错误 9.1.2 处理运行时错误 9.1.3 科学的调试 9.2 单元测试 9.3 Profiling 9.1 调试 定期地进行备份是程序设计中地一个关键环节- ... 
- 台湾旺玖MA8601|USB HUB方案|MA8601测试版
			MA8601是USB 2.0高速4端口集线器控制器的高性能解决方案,完全符合通用串行总线规范2.0.MA8601继承了先进的串行接口技术,当4个DS(下游)端口同时工作时,功耗最低. MA8601采用 ... 
- 编写Java程序,根据提供的 IP 地址,获取主机名称和域名
			查看本章节 查看作业目录 需求说明: 根据提供的 IP 地址,获取主机名称和域名 实现思路: 创建 GetHostNameByIpAddress 类,在main方法中声明 String 类型的变量 i ... 
- 编写Java程序,观察类启动时静态代码块和main()的执行顺序
			返回本章节 返回作业目录 需求说明: 观察类启动时静态代码块和main()的执行顺序 在Book类中定义静态代码块. 在Book中分别定义一个普通实例方法和静态方法. 在Book类的静态代码块中调用静 ... 
- Ubuntu安装Jenkins是报错:The following signatures couldn't be verified because the public key is not available: NO_PUBKEY XXXXXXXXXXX
			我使用Ubuntu16.04安装Jenkins时,按照官网的要求,步骤如下(https://pkg.jenkins.io/debian-stable/): # 添加Key sudo wget -q - ... 
- 图解MongoDB集群部署原理(3)
			MongoDB的集群部署方案中有三类角色:实际数据存储结点.配置文件存储结点和路由接入结点. 连接的客户端直接与路由结点相连,从配置结点上查询数据,根据查询结果到实际的存储结点上查询和存储数据.Mon ... 
- Go数组遍历与排序
			遍历数组 Go遍历数组有两种方式 1.按照数组下标进行遍历 2.用range遍历 package main import ( "fmt" ) func main() { // 声明 ... 
- vue中computed的作用以及用法
			在vue中computed是计算属性,主要作用是把数据存储到内存中,减少不必要的请求,还可以利用computed给子组件的data赋值. 参考地址:https://www.jianshu.com/p/ ... 
- 实验 6 :OpenDaylight 实验——OpenDaylight 及 Postman实现流表下发
			实验 6 :OpenDaylight 实验--OpenDaylight 及 Postman实现流表下发 一.实验目的 熟悉 Postman 的使用:熟悉如何使用 OpenDaylight 通过 Pos ... 
