Lightoj 1030 概率dp

Problem:

Analyse:

dp[i]为i开始走到结尾的价值,

那么dp[i]是从后面的6个转移过来的.

这样我们就倒着递推就好了(后面的要先算好).

注意后面不足六个的时候的处理情况.

/**********************jibancanyang**************************
 *Author*        :jibancanyang
 *Created Time*  : 一  5/ 9 20:38:59 2016
 *File Name*     : .cpp

**Code**:
***********************[email protected]**********************/

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <stack>
using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
typedef unsigned long long ull;
vector<int> vi;
#define pr(x) cout << #x << ": " << x << "  "
#define pl(x) cout << #x << ": " << x << endl;
#define pri(a) printf("%d\n",(a));
#define xx first
#define yy second
#define sa(n) scanf("%d", &(n))
#define sal(n) scanf("%lld", &(n))
#define sai(n) scanf("%I64d", &(n))
#define vep(c) for(decltype((c).begin() ) it = (c).begin(); it != (c).end(); it++)
const int mod = int(1e9) + 7, INF = 0x3fffffff;
const int maxn = 1e5 + 13;
int T, n;
double dp[111];
int a[111];

int main(void)
{
#ifdef LOCAL
    freopen("/Users/zhaoyang/in.txt", "r", stdin);
    //freopen("/Users/zhaoyang/out.txt", "w", stdout);
#endif
    //ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin >> T;
    int cas = 1;
    while (T--) {
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        dp[n] = (double)a[n];
        for (int i = n - 1; i >= 1; i--) {
            dp[i] = a[i];
            int m = min(n, i + 6);
            for (int j = i + 1; j <= m; j++) {
                dp[i] += dp[j] / (m - i) ;
            }
        }
        cout << "Case " <<  cas++ << ": " ;
        printf("%.14f\n", dp[1]);
    }

    return 0;
}
时间: 2024-10-09 19:04:23

Lightoj 1030 概率dp的相关文章

Light oj 1030 概率DP

D - Discovering Gold Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice LightOJ 1030 Description You are in a cave, a long cave! The cave can be represented by a 1

LightOJ - 1151概率dp+高斯消元

概率dp+高斯消元 https://vjudge.net/problem/LightOJ-1151 题意:刚开始在1,要走到100,每次走的距离1-6,超过100重来,有一些点可能有传送点,可以传送到前面或后面,那么概率dp没法递推,只能高斯消元 设期望E(x),首先100这个位置的期望E(100)=0,然后可以找出方程, 对于传送点,E(x)=E(go(x)),对于非传送点,E(x)=(E(x+1)+E(x+2)+E(x+3)+E(x+4)+E(x+5)+E(x+6)+6)/cnt(cnt是可

LightOJ - 1079 概率dp

题意:n个银行,每个有价值和被抓概率,要求找被抓概率不超过p的最大价值 题解:dp[i][j]表示前i个取j价值的所需最小概率,01背包处理,转移方程dp[i][j]=min(dp[i-1][j],dp[i-1][j-v[i]]+(1-dp[i-1][j-v[i]])*p) #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pi

lightoj 1408 概率dp

https://blog.csdn.net/moon_sky1999/article/details/98097470 博主在此,牛逼神犇 1 #include<bits/stdc++.h> 2 using namespace std; 3 const double eps = 1e-9; 4 int main(){ 5 int T,k1,k2; 6 double p; 7 scanf("%d",&T); 8 for(int cas=1;cas<=T;cas+

LightOJ 1364 树形DP

52张扑克牌,问拿到指定数量的4个花色的最少次数期望是多少,其中拿到joker必须马上将其视作一种花色,且要使后续期望最小. 转移很容易想到,主要是两张joker的处理,一个状态除了普通的4个方向的转移,当没拿到joker时还要增加拿到joker的期望,根据题意直接在当前状态下找最小的期望计算即可. /** @Date : 2017-08-29 17:58:59 * @FileName: LightOJ 1364 概率DP.cpp * @Platform: Windows * @Author :

LightOJ 1030 Discovering Gold (概率/期望DP)

题目链接:LightOJ - 1030 Description You are in a cave, a long cave! The cave can be represented by a \(1 \times N\) grid. Each cell of the cave can contain any amount of gold. Initially you are in position \(1\). Now each turn you throw a perfect \(6\) s

Lightoj 1038 - Race to 1 Again (概率DP)

题目链接: Lightoj  1038 - Race to 1 Again 题目描述: 给出一个数D,每次可以选择数D的一个因子,用数D除上这个因子得到一个新的数D,为数D变为1的操作次数的期望为多少? 解题思路: 概率DP咯,对于只知道期望是:E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn)的窝,拿这个题目没有一点办法.然后看了讨论版,发现总会有一些神人存在. 求操作次数的期望时,先设定第i个因子给期望的贡献为Ti,那么有:E = (T1 + T2 + T3

LightOJ 1065 Island of Survival (概率DP?)

题意:有 t 只老虎,d只鹿,还有一个人,每天都要有两个生物碰面,1.老虎和老虎碰面,两只老虎就会同归于尽 2.老虎和人碰面或者和鹿碰面,老虎都会吃掉对方 3.人和鹿碰面,人可以选择杀或者不杀该鹿4.鹿和鹿碰面,没事问人存活下来的概率 析:最后存活肯定是老虎没了,首先可以用概率dp来解决,dp[i][j] 表示 还剩下 i 考虑, j 只鹿存活的概率是多少. 然后每次分析这几种情况即可. 还有一种思路就是只要考虑老虎没了,只要老虎没了就能存活,只要计算老虎全死完的概率就好,首先如果老虎是奇数,是

LightOJ 1268 Island of Survival 数学神解/不用写那些guapi概率dp

谢谢Wen_kr的翻译 题目大意: 你困在一个岛上,上面有老虎和鹿,分别有 只与 只. 如果有一天,你和老虎相遇,那么你死,你和鹿相遇,那么你可以选择杀死或者不杀死这头鹿,老虎和鹿相遇,那么鹿死,鹿和鹿相遇,什么也不会发生,老虎与老虎相遇,那么它们会杀死对方. 每天仅能有一对动物相遇,问你不死并且所有老虎死掉的最大概率. 第一种解法:概率dp 设dp[i][j]为i头老虎j头鹿满足条件的概率...... 这个解法不重要,重要的是下一个. 第二种解法:数学贪心 尽量让老虎自相残杀 即当前老虎为t,