zoukankan      html  css  js  c++  java
  • hdu2955_Robberies 01背包

    有一个强盗要去几个银行偷盗,他既想多投点钱,又想尽量不被抓到。已知各个银行

    的金钱数和被抓的概率,以及强盗能容忍的最大被抓概率。求他最多能偷到多少钱?

    解:以概率为价值 问价值在合理范围背包的最大容量

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    struct bag
    {
        int v;
        double p;
    }Bag[10010];
    double dp[10010];
    
    int main()
    {
        int T,N;
        double p;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%lf %d",&p,&N);
            int sum = 0;
            for(int i = 0; i < N; i++)
            {
                scanf("%d%lf",&Bag[i].v,&Bag[i].p);
                sum += Bag[i].v;
            }
            memset(dp,0,sizeof(dp));
            dp[0] = 1;
            for(int i = 0; i < N; i++)
            {
                for(int j = sum; j >= Bag[i].v; j--)
                {
                    dp[j] = max(dp[j],dp[j-Bag[i].v]*(1-Bag[i].p));
                }
            }
    
            for(int i = sum; i >= 0; i--)
            {
                if(dp[i] > 1-p)
                {
                    printf("%d
    ",i);
                    break;
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    JS 按钮下一步(onclick点击事件)
    socketserver模块
    进程
    僵尸进程和孤儿进程
    守护进程
    互斥锁
    进程间通信=>IPC机制
    生产者消费者模型
    线程
    守护线程
  • 原文地址:https://www.cnblogs.com/Aragaki/p/7602440.html
Copyright © 2011-2022 走看看