码迷,mamicode.com
首页 > 系统相关 > 详细

hdu5781 2016多校1001 ATM Machine

时间:2016-08-05 15:19:13      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

http://acm.hdu.edu.cn/showproblem.php?pid=5781

当时并没有做出这题。

一个人只记得存款上限K,最多取W次,同时她想要取完钱并且取钱次数最少,问期望是多少。

 dp[i][j]=min(dp[i][j],(i-k+1)*1.0/(i+1)*dp[i-k][j]+k*1.0/(i+1)*dp[k-1][j-1]+1);

这样无疑会超时,但是有一个性质,如果p取不了,那么p+1更取不了,所以取钱次数最多logk=11

至于要是次数不够,那就定义为无穷

技术分享
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<string>
#include<cctype>
#include<stack>
#include<queue>
#include<set>
#include<sstream>
#include<map>
#include<ctime>
using namespace std;
#define For(i,k,n) for(int i=k;i<=n;i++)
#define ForD(i,k,n) for(int i=n;i>=k;i--)
#define Lson (u<<1)
#define Rson ((u<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define NEG(a) memset(a,-1,sizeof(a));
#define FILL(a) memset(a,0x3f,sizeof(a));
#define INF 0x3f3f3f3f
#define LLINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define print(b,a) cout<<b<<"="<<a<<endl;
#define printbin(b,a){int tmp=a;string s;do{s+=tmp%2+‘0‘;tmp/=2;}while(tmp);reverse(s.begin(),s.end());cout<<"bin "<<b<<"="<<s<<endl;}
#define printarr(i,a,f,b) {For(i,f,b) printf("%d ",a[i]); printf("\n");}
#define fp   freopen("in.txt","r",stdin)
#define maxn 2005
#define lim 11

double dp[maxn][maxn];
void init()
{
    for(int i=1;i<=2000;i++)
        for(int j=0;j<=lim;j++)
            dp[i][j]=INF;
    for(int i=0;i<=lim;i++)
        dp[0][i]=0;
    for(int i=1;i<=2000;i++)
        for(int j=1;j<=lim;j++)
            for(int k=1;k<=i;k++)
                dp[i][j]=min(dp[i][j],(i-k+1)*1.0/(i+1)*dp[i-k][j]+k*1.0/(i+1)*dp[k-1][j-1]+1);
}
int main()
{
    int k,w;
    init();
    while(scanf("%d%d",&k,&w)!=EOF)
        printf("%.6f\n",dp[k][min(w,lim)]);
    return 0;
}
View Code

 

hdu5781 2016多校1001 ATM Machine

标签:

原文地址:http://www.cnblogs.com/diang/p/5741051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!