状态:dp[i]——最多有 i 元,再把钱花完的情况下,最多的点菜方案
状态方程:dp[i] = max(dp[i],dp[i-w[k]]+1)
初始化:dp[0] = 0;dp[1~m]=-2147483648
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n,m;
n = in.nextInt();
m = in.nextInt();
int[] w = new int[105];
int[] dp = new int[10005];
for (int i = 1; i <= n; i++) {
w[i] = in.nextInt();
}
dp[0] = 0;
for (int i = 1; i <= m; i++) dp[i] = -2147483648;
for (int k = 1; k <= n; k++) {
for (int i = m; i >= w[k]; i--) {
dp[i] = Math.max(dp[i],dp[i-w[k]]+1);
}
}
System.out.println(dp[m]);
}
}