您的位置:首页 > 其它

HDU2955

2015-05-30 23:33 337 查看
浮点数无法作为数组下标进行遍历,改用个数进行遍历。

计算概率反用(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;
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: