洛谷链接:https://www.luogu.com.cn/problem/P1049
其实就是简单01背包问题,把最小剩余量看成最大储存量就行
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int v=in.nextInt(); //箱子容量
int n=in.nextInt(); //物品总数
int[] a=new int[31];
int[] f=new int[20001];
for(int i=1;i<=n;i++) {
a[i]=in.nextInt();
}
for(int i=1;i<=n;i++) {
for(int j=v;j>=1;j--) {
if(j>=a[i]) {
f[j]=Math.max(f[j], f[j-a[i]]+a[i]);
}
}
}
System.out.println(v-f[v]);
}
}