HDU2955

来源:互联网 发布:资料器械进销存软件 编辑:程序博客网 时间:2024/06/06 01:06

浮点数无法作为数组下标进行遍历,改用个数进行遍历。
计算概率反用(1-p(n))的方法进行计算。

#include <iostream>#include <string.h>using namespace std;const int MAX=0x7fffffff;double dp[10005];int main(){    int n;    while(cin>>n){        while(n--){            double v;            int m;            cin>>v>>m;            int vl[105];            double co[105];            int sum=0;            for(int i=0;i<m;i++){                cin>>vl[i]>>co[i];                sum+=vl[i];            }            for(int i=0;i<=sum;i++)dp[i]=0;            dp[0]=1;            for(int j=0;j<m;j++){            for(int i=sum-vl[j];i>=0;i--){                dp[i+vl[j]]=max(dp[i+vl[j]],dp[i]*(1-co[j]));            }            }            for(int i=sum;i>=0;i--){                if(dp[i]>(1-v)&&dp[i]!=0){                      cout<<i<<endl;                      break;                }            }        }    }}
0 0