• codevs 1997 守卫者的挑战


    /*
    表示很遗憾..
    开始状态想的没错 就是转移的时候出了问题 自己也想到了数组平移
    然而没往下写 与正解擦肩而过….
    然后为了好转移写了个4维的 时间不多了没来得及降维 草草的算算空间就交了…
    尼玛double忘记*8了 华丽的直接Memory limit exceeded while compiling
    我尼玛0分
    考试后写了写用原来的状态写了写数组平移然后降维
    数据太水就A了
    
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 210
    #define base 200
    using namespace std;
    int n,l,K,p[maxn],c[maxn],sum;
    double f[2][maxn*10][maxn],ans;
    int main()
    {
        scanf("%d%d%d",&n,&l,&K);sum+=K;
        for(int i=1;i<=n;i++)scanf("%d",&p[i]);
        for(int i=1;i<=n;i++)
          {
              scanf("%d",&c[i]);
              if(c[i]!=-1)sum+=c[i];
          }
        f[0][K+base][0]=1;
        for(int i=1;i<=n;i++)
          {
              for(int j=sum+base;j>=0;j--)
              for(int k=n;k>=0;k--)
              {
                if(k>0&&j>=c[i])f[i&1][j][k]+=f[(i-1)&1][j-c[i]][k-1]*(double(p[i])/100.0);//赢了 
                f[i&1][j][k]+=f[(i-1)&1][j][k]*(double(100-p[i])/100.0);//输了 
              }
            for(int j=sum+base;j>=0;j--)
              for(int k=n;k>=0;k--)
                f[(i-1)&1][j][k]=0;
          }
        for(int i=base;i<=sum+base;i++)
          for(int j=l;j<=n;j++)
            ans+=f[n&1][i][j];
        printf("%.6f
    ",ans);
        return 0;
    }
  • 相关阅读:
    Nhibernate1
    控制反转(IoC)
    Windbg是windows平台上强大的调试器
    Java 7 语法新特性
    区间数据计算
    红黑树数据结构剖析
    .net下灰度模式图像
    如何配置Hyper-V的虚拟机通过主机网络上网 (NAT)
    产品落地
    poj-3898 Software Industry Revolution DP
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5781706.html
Copyright © 2020-2023  润新知