hdu-2955(01背包+逆向思维+审题)

Posted 2018zxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu-2955(01背包+逆向思维+审题)相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955

思路:注意p和m[i]是被抓的概率,不能直接用,要转换为逃跑的概率,然后将得到的钱视为背包体积再求解。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
double p,vol[120],dp[12000]; 
int n,t,cost[120];
int main(void)
{
    int i,j,sum;
    cin>>t;
    while(t--)
    {
        memset(dp,0,sizeof(dp));
        sum=0;
        dp[0]=1;
        cin>>p>>n;
        p=1.0-p;
        for(i=0;i<n;i++) cin>>cost[i]>>vol[i],sum+=cost[i],vol[i]=1.0-vol[i];
        for(i=0;i<n;i++)
        {
            for(j=sum;j>=cost[i];j--)
            dp[j]=max(dp[j],dp[j-cost[i]]*vol[i]);
        }
        for(i=sum;i>=0;i--)
        {
            if(dp[i]>=p) break;
        }
        cout<<i<<endl;
    }
    return 0;
}

 

以上是关于hdu-2955(01背包+逆向思维+审题)的主要内容,如果未能解决你的问题,请参考以下文章

HDU 2955 01背包

hdu 2955 01背包

HDU2955(01背包)

hdu2955 Robberies (01背包)

01背包+卡精度 Hdu 2955

HDU 2955 01背包 / 小数