题解 | #【模板】完全背包#

【模板】完全背包

https://www.nowcoder.com/practice/237ae40ea1e84d8980c1d5666d1c53bc

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
		// input 
		final int N = in.nextInt();
		final int V = in.nextInt();
		int[] v = new int[N];
		int[] w = new int[N];
				
		for (int i = 0; i != N; ++i) {
			v[i] = in.nextInt();
			w[i] = in.nextInt();
        }

		// work1
		int[] maxVals = new int[V + 1];
		
		for (int i = 1; i != V + 1; ++i) {
			for (int j = 0; j != N; ++j) {
				if (i - v[j] >= 0) {
					int val = maxVals[i - v[j]] + w[j];	
					maxVals[i] = Math.max(val, maxVals[i]);
				}				
			}						
		}
		
		// work2
		int[] vals = new int[V + 1];
		boolean[] ok = new boolean[V + 1];
		
		ok[0] = true;
		
		for (int i = 1; i != V + 1; ++i) {
			for (int j = 0; j != N; ++j) {
				int k = i - v[j];
				if (k >= 0 && ok[k]) { 
					ok[i] = true;	
					vals[i] = Math.max(w[j] + vals[k], vals[i]);
				}				
			}						
		}		
		
		System.out.println(maxVals[V]);
		System.out.println(ok[V] ? vals[V] : 0);        
    }
}

全部评论

相关推荐

饼子吃到撑:当我看到外企的时候,我就知道这大概率可能是真的
点赞 评论 收藏
分享
爱喝奶茶的垂耳兔拥抱太阳:感觉项目和实习没有技术亮点和难点,单纯说了自己干了啥
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务