Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 18054 Accepted Submission(s): 6668
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int t,n; float p,dp[10005]; int wight[105]; float cost[105]; int main() { scanf("%d",&t); for(int i=1;i<=t;i++) { memset(dp,0,sizeof(dp)); memset(wight,0,sizeof(wight)); memset(cost,0,sizeof(cost)); scanf("%f%d",&p,&n); int sum=0; for(int j=1;j<=n;j++) { scanf("%d %f",&wight[j],&cost[j]); sum+=wight[j]; cost[j]=(1-cost[j]); } dp[0]=1; for(int j=1;j<=n;j++) { for(int k=sum;k>=wight[j];k--) dp[k]=max(dp[k],dp[k-wight[j]]*cost[j]); } int gg; for(gg=sum;gg>=1;gg--) { if((1-dp[gg])<=p) { break; } } printf("%d\n",gg); } return 0; }
原文:http://www.cnblogs.com/hsd-/p/5185800.html