• 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;
    }
  • 相关阅读:
    浅谈web网站架构演变过程
    大数据量下高并发同步的讲解
    web api中的RouteHandler
    在DOS使用SVN之执行命令整理(TortoiseProc.exe)
    调用微信退款接口问题备忘
    java上传本地文件至hdfs(简单写一下)
    wordcount计数
    结对项目(JAVA)
    WC个人项目(JAVA实现)
    自我介绍+软工5问
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5781706.html
Copyright © 2020-2023  润新知