HDU 2955 Robberies(01 背包)

#include<cstdio>

#include<cstring>

#include<iostream>

#include<algorithm>

using namespace std;

struct Node

{

  int m;

  double p;

};

Node bank[200];

double dp[100000];

int main()

{

  int t,n;

  double p;

  int i,j,k;

  scanf("%d",&t);

  while(t--)

  {

    memset(dp,0,sizeof(dp));

    dp[0]=1.0;

    scanf("%lf%d",&p,&n);

    for(i=0;i<n;i++)

    {

      scanf("%d%lf",&bank[i].m,&bank[i].p);

    }

    for(i=0;i<n;i++)

    {

      for(j=10000;j>=bank[i].m;j--)

      {

        dp[j]=max(dp[j],dp[j-bank[i].m]*(1-bank[i].p));

      }

    }

    int ans=0;



    for(i=11000;i>=0;i--)

    {

      if(dp[i]>1-p) {ans=i; break;}

    }

    printf("%d\n",ans);

  }

  return 0;

}

  

你可能感兴趣的:(HDU)