完全背包在理解01背包的基础上就容易做出了,01背包之所以使用倒序,是因为dp为一维数组,每次存放同一种物品只能存放一次,故采用倒序,采用正序就可能出现一个物品存放多次的情况。而正序存放的情况刚好适合完全背包问题。

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String[] str = sc.nextLine().split(" ");
        int n = Integer.parseInt(str[0]);//物品种类
        int V = Integer.parseInt(str[1]);//背包体积
        int[] v = new int[n+1];//每种物品的体积
        int[] w = new int[n+1];//每种物品的价值
        for(int i=1;i<=n;i++){
            str = sc.nextLine().split(" ");
            v[i] = Integer.parseInt(str[0]);
            w[i] = Integer.parseInt(str[1]);
        }
        int[] dp = new int[V+1];
        int[] dp2 = new int[V+1];
        Arrays.fill(dp2,Integer.MIN_VALUE);
        dp2[0] = 0;
        for(int i=1;i<=n;i++)
            for(int j=v[i];j<=V;j++){
                dp[j] = Math.max(dp[j],dp[j-v[i]]+w[i]);
                dp2[j] = Math.max(dp2[j],dp2[j-v[i]]+w[i]);
            }
        System.out.println(dp[V]);
        if(dp2[V]<0)
            System.out.println(0);
        else
            System.out.println(dp2[V]);

    }
}