解题关键:状态转移方程:dp[i][j]=Math.max(dp[i-1][j], dp[i-1][j-w[i]]+p[i])
import java.util.*;
public class Main{
static int i,j; static int dp[][],w[],p[]; static int m,n; public static void input(){ Scanner s=new Scanner(System.in); n=s.nextInt(); m=s.nextInt(); dp=new int[n+1][m+1]; w=new int [n+1]; p=new int [n+1]; for(i=1;i<=n;i++){ w[i]=s.nextInt(); p[i]=s.nextInt(); } } public static int knap(int m,int n){ for(i=1;i<=n;i++) for(j=0;j<=m;j++){ if(j<w[i]) dp[i][j]=dp[i-1][j]; else dp[i][j]=Math.max(dp[i-1][j], dp[i-1][j-w[i]]+p[i]); } return dp[n][m]; } public static void main(String[] args) { input(); System.out.println(knap(m,n)); } }