hdu2955 01揹包變形 菜鳥見諒

在我眼中的你

年華美麗

盛開如詩

 


//這題的精度比較高,所以要調轉一下思路。以偷到最多的錢爲揹包最大容量,求出不被抓的概率
//題意給的是被抓的概率P,所以不被抓的概率就是1-P
//幼稚園的老師告訴我們被抓的事件是獨立的所以,f[l]=max(f[l],f[l-a[k].C]*a[k].M);
//這裏是都不被抓的概率

//不過這題要注意精度

 

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
struct
{
 int C;
 float M;
}a[10005];
float max(float a,float b)
{
 if(a>b)return a;
 else return b;
}

int i,j,k,l,N,n,sum;
float Q;
int main()
{
 cin>>n;
 while(n--)
 {
  cin>>Q>>N;
  Q=1-Q;
  sum=0;
  for(j=0;j<N;j++)
  {
   cin>>a[j].C>>a[j].M;
   a[j].M=1-a[j].M;
   sum=sum+a[j].C;
  }
  float f[10005]={1.0};
  for(k=0;k<N;k++)
  {
   for(l=sum;l>=a[k].C;l--)
   {
    f[l]=max(f[l],f[l-a[k].C]*a[k].M);
   }
  }
  for(i=sum;i>=0;i--)
  {
   if(f[i]-Q>0.000000001)
   {
    cout<<i<<endl;
    break;
   }
  } 
 }
 return 0;
}


 


 

發佈了40 篇原創文章 · 獲贊 18 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章