典型01背包问题,注意概率公式。
AC代码如下:
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;
public class Main{
static Scanner input = new Scanner(System.in);
static PrintWriter out = new PrintWriter(System.out);
static double[] dp = new double[10005];
static int[] a = new int[10005];
static double[] b = new double[10005];
public static void main(String[] args){
while(input.hasNext()){
int m = input.nextInt();//money
int n = input.nextInt();//num
if(m==0&&n==0)break;
for(int i=0;i<n;i++){
a[i] = input.nextInt();
b[i] = input.nextDouble();
}
Arrays.fill(dp,0);
for(int i=0;i<n;i++){
for(int j=m;j>=a[i];j--){
dp[j] = Math.max(dp[j],dp[j-a[i]]+(1-dp[j-a[i]])*b[i]);
//out.println("test,dp["+j+"]="+dp[j]);
}
}
out.printf("%.1f",dp[m]*100);
out.println("%");
}
out.close();
}
}