POJ 3624 A

来源:互联网 发布:mysql count 性能优化 编辑:程序博客网 时间:2024/05/19 00:09

简单01背包http://poj.org/problem?id=3624
注意空间超限问题:
1、可以使用一维数组来优化
2、使用滚动数组

//使用一维数组import java.util.Scanner;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;/** * Created by hms on 2017/3/28. */public class Solution {    public static void main(String[] args) {        int N, M;        Scanner scanner = new Scanner(System.in);        N = scanner.nextInt();        M = scanner.nextInt();        int w[] = new int[N+5];        int v[] = new int[N+5];        for(int i = 1; i <= N; ++i) {            w[i] = scanner.nextInt();            v[i] = scanner.nextInt();        }        int dp[] = new int[M+5];        for(int i = 1; i <= N; ++i) {            for(int j = M; j >= w[i]; --j) {                dp[j] = Math.max(dp[j], dp[j-w[i]] + v[i]);            }        }        System.out.println(dp[M]);    }}
//使用滚动数组import java.util.Scanner;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;/** * Created by hms on 2017/3/28. */public class Main {    public static void main(String[] args) {        int N, M;        Scanner scanner = new Scanner(System.in);        N = scanner.nextInt();        M = scanner.nextInt();        int w[] = new int[N+5];        int v[] = new int[N+5];        for(int i = 1; i <= N; ++i) {            w[i] = scanner.nextInt();            v[i] = scanner.nextInt();        }        int dp[][] = new int[2][M+5];        for(int i = 1; i <= N; ++i) {            for(int j = M; j >= 0; --j) {                if(j >= w[i]) dp[i&1][j] = Math.max(dp[(i-1)&1][j] , dp[(i-1)&1][j-w[i]]+v[i]);                else dp[i&1][j] = dp[(i-1)&1][j];            }        }        System.out.println(dp[N&1][M]);    }}
0 0
原创粉丝点击