HDU_2955_ROBBERY

总结:可以从这里知道,0-1背包问题,价值和重量可以交换,对于其中只要一个为整型就可以解决
#include  < iostream >
#include 
< cstdio >
#include 
< cstdlib >
using   namespace  std;

const   int  MAXN  =   110 ;

double  f[ 100000 ];
int  w[MAXN];
double  v[MAXN];
int  main()  {
    
    
int cas;
    scanf(
"%d",&cas);
    
while(cas--{
       
double p;
       
int n;
       scanf(
"%lf%d",&p,&n);
       
int sum = 0;
       
for(int i = 0; i < n; i++{
          scanf(
"%d%lf",&w[i],&v[i]);
          sum 
+= w[i];
       }

       
       memset(f,
0,sizeof(f));
       
       f[
0= 1;
       
for(int i = 0; i < n; i++)
         
for(int j = sum; j >= w[i]; j--{
            f[j] 
= max(f[j],f[j-w[i]]*(1-v[i]));
         }
 
       
       
for(int j = sum; j >= 0; j--{
          
if(f[j] > 1 - p) {
             cout
<<j<<endl;
             
break;
          }

       }

    }

    
  
//  system("pause");
    return 0;
}


你可能感兴趣的:(HDU_2955_ROBBERY)