1 条题解

  • 1
    @ 2024-4-9 9:12:46
    import  java.util.*;
    public class Main{
        static int N, m;
        static int v[];
        static int w[];
        static int res = 0;
    
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
    
            m = scan.nextInt();//背包容量
            N = scan.nextInt(); //N件物品
            w = new int[N + 1]; //物品的体积
            v = new int[N + 1];//物品所占的价值
            for (int i = 1; i <= N; i++) {
                w[i] = scan.nextInt();//物品的体积
                v[i] = scan.nextInt();//物品所占的价值
            }
    //        System.out.println(dfs(1,m));
            //一维写法;
            int dp[] = new int[m + 1];
            for (int i = 1; i <= N; i++) {
                //从后往前遍历的原因是,dp[j]是dp[j-w[i]]的后一个状态;
                for (int j = m; j >= w[i]; j--) {//容量能装下wi;
                    dp[j] = Math.max(dp[j], dp[j - w[i]] + v[i]);
                }
            }
            System.out.println(dp[m]);
        }
    }
    //        //        int dp[][]=new int[N+1][m+1];
    //        //二维写法,i为物品个数,j为体积;
    ////        for(int i=1;i<=N;i++){
    ////          for (int j=1;j<=m;j++){
    ////              if(j<w[i]){  //如果当前面积装不下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]]+v[i]);
    ////              }
    ////                 }
    ////            }
    //        System.out.println(dp[N][m]);
    //        }
                                dfs写法 
    //    private static int dfs(int x,int spy) {
    //        if(x>N){
    //            return 0;
    //        }else{
    //            if(spy<w[x]){ //当前背包容量装不下w[x]
    //                return dfs(x+1,spy);
    //            }else {
    //                return Math.max(dfs(x+1,spy),dfs(x+1,spy-w[x])+v[x]);
    //            }
    //        }
    //    }
    //}
    
    • 1

    信息

    ID
    115
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    92
    已通过
    40
    上传者