概率dp 投掷色子走一定步数 期望

来源:互联网 发布:茂日软件登录 编辑:程序博客网 时间:2024/05/02 00:00

两题的结束方式略有不同

hdu 4405 Aeroplane chess

#include<iostream>#include<algorithm>#include<iostream>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<vector>#include<queue>#include<cmath>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define maxnode 1000010#define sigma_size 26const int dir[4][2]={0,1,0,-1,1,0,-1,0};int n,m;int map[100005];double dp[100005];int main(){while(scanf("%d%d",&n,&m)!=EOF&&n!=0){memset(map,-1,sizeof(map));memset(dp,0,sizeof(dp));int i,j;int ta,tb;for(i=1;i<=m;i++){scanf("%d%d",&ta,&tb);map[ta]=tb;}dp[n]=0;for(i=n-1;i>=0;i--){if(map[i]==-1)dp[i]=(dp[i+1]+dp[i+2]+dp[i+3]+dp[i+4]+dp[i+5]+dp[i+6])/6.0+1;elsedp[i]=dp[map[i]];}printf("%.4lf\n",dp[0]);}return 0;}

Acdream 1113 The Arrow

/** this code is made by 2Bpencil* Problem: 1113* Verdict: Accepted* Submission Date: 2014-06-08 21:26:46* Time: 92MS* Memory: 1868KB*/#include<stdio.h>#include<string.h>#include<stdlib.h> double dp[100005];int n; int main(){    int T;    scanf("%d",&T);    while(T--)    {        scanf("%d",&n);        int i,j;        memset(dp,0,sizeof(dp));        if(n-1>=0)dp[n-1]=6.0;        if(n-2>=0)dp[n-2]=6.0;        if(n-3>=0)dp[n-3]=6.0;        if(n-4>=0)dp[n-4]=6.0;        if(n-5>=0)dp[n-5]=6.0;        for(i=n-6;i>=0;i--)        {            for(j=1;j<=6;j++)                dp[i]+=dp[i+j];            dp[i]=dp[i]/6+1;        }        printf("%.2lf\n",dp[0]);    }    return 0;}


0 0
原创粉丝点击