【ZOJ】3640 Help Me Escape

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4808

题意:一个吸血鬼初始攻击力为f。n条路,他每次等概率选择一条路。如果攻击力大于这条路的c[i],则花费t[i]天逃出($t[i]=\frac{1+\sqrt{5}}{2} \times c[i]^2$),否则花费1天的时间继续选择路。问逃出去的期望天数(1<=c[i], f<=10000)

#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
const int N=20005;
double f[N];
int n, c[N], t[N];
double E(int x) {
	if(f[x]>0) return f[x];
	double &now=f[x];
	for(int i=0; i<n; ++i) {
		if(x>c[i]) now+=t[i];
		else now+=E(x+c[i])+1;
	}
	now/=n;
	return now;
}
int main() {
	int now;
	while(~scanf("%d%d", &n, &now)) {
		for(int i=0; i<n; ++i) scanf("%d", &c[i]), t[i]=(1.0+sqrt(5))/2*c[i]*c[i];
		printf("%.3f\n", E(now));
		memset(f, 0, sizeof f);
	}
	return 0;
}

  

简单题无脑dp= =

设$f[i]$表示攻击力为$i$时逃出去所需要的期望天数..随便搞一下就行了..

时间: 2024-10-10 22:32:22

【ZOJ】3640 Help Me Escape的相关文章

【ZOJ】3604 Help Me Escape(概率DP)

题目大意:有n条路可以选择,随机选择,选择了这条路时有一条规则,假如攻击力f大于了这条路的ci,那么可以从这条路逃出去,花费ti(有对应公式计算) 假如小于等于该值,则花费一天,并且攻击力增加ci,重复刚才的操作.问最终的期望是多少. 思路: dp[i]表示的是攻击力为i的情况下,出去的期望. 根据期望的概念可以得 状态方程:dp[i]+=(1+dp[i+c[i])/n (当攻击力小于等于c[i]) dp[i]+=t[i]/n                  (当攻击力大于c[i]) 可以用一

【ZOJ】3380 Patchouli&#39;s Spell Cards

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3957 题意:m个位置,每个位置填1~n的数,求至少有L个位置的数一样的概率(1<=n,m,l<=100) #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct inum { static const int N=205,

【ZOJ】3785 What day is that day? ——浅谈KMP应用之ACM竞赛中的暴力打表找规律

首先声明一下,这里的规律指的是循环,即找到最小循环周期.这么一说大家心里肯定有数了吧,“不就是next数组性质的应用嘛”. 先来看一道题 ZOJ 3785 What day is that day? Time Limit: 2 Seconds      Memory Limit: 65536 KB It's Saturday today, what day is it after 11 + 22 + 33 + ... + NN days? Input There are multiple tes

【ZOJ】3430 Detect the Virus

动态建树MLE.模仿别人的代码模板各种原因wa后,终于AC. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 using namespace std; 6 7 #define MAXN 515*70 8 #define NXTN 256 9 10 bool visit[515]; 11 char str[3005]; 12 unsigned

【有上下界网络流】【ZOJ】2314 Reactor Cooling

[算法]有上下界网络流-无源汇(循环流) [题解] 无源汇网络流相当于重建图后跑最大流. 循环流要求每个点(或边)的流入量和流出量相等. http://www.cnblogs.com/liu-runda/p/6262832.html http://hzwer.com/3356.html 入度>出度时(in[x]>0)时,需要流出去,所以从源向点引一条边,引诱它流出去. 入度<出度时(in[x]<0)时,需要流进来,所以从点向汇引一条边,引诱它流进来. 为何这样正确?源和汇的作用只是

【ZOJ】【3329】One Person Game

概率DP kuangbin总结题目中的第三道 看来还是没有进入状态啊……都说是DP了……当然是要找[状态之间的转移关系]了…… 本题中dp[i]跟 dp[i-(k1+k2+k3)] 到dp[i-1]都有关系……然后所有的dp[i]都跟dp[0]即ans有关…… 用[系数]进行转移……sigh最近越来越水了 1 //BZOJ 1000 2 #include<cmath> 3 #include<vector> 4 #include<cstdio> 5 #include<

【转】简单明了区分escape、encodeURI和encodeURIComponent

原文链接 奇葩一朵朵 – http://www.cnblogs.com/season-huang/ 一.前言 讲这3个方法区别的文章太多了,但是大部分写的都很绕.本文试图从实践角度去讲这3个方法. 二.escape和它们不是同一类 简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读.编码之后的效果是%XX或者%uXXXX这种形式.其中 ASCII字母.数字.@*/+ ,这几个字符不会被编码,其余的都会.最关键的是,当你需要对URL编码时

【ZOJ】Nice Patterns Strike Back(矩阵快速乘法)

dp[[i][j] = sum(dp[i - 1][k]) (k -> j) 状态方程,因为N很大而M很小,所以第一时间可以想到矩阵优化 可能之前没做过类似的题被卡的很厉害. 另外用C++写大数真心麻烦.. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 45; const int maxd = 30005; char n[ma

【ZOJ】3329 One Person Game

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754 题意:有三个色子,分别有k1.k2.k3个面,权值分别是1-k1, 1~k2, 1~k3,等概率朝上.如果朝上的面分别为a.b.c,则分数置0,否则累加权值和.当权值和>n时则结束,求期望次数.T组数据.(T<=300; 1<k1,k2,k3<=6) #include <cstdio> #include <cstring> usin