您的位置:首页 > 其它

POJ 3624 A - Charm Bracelet

2017-05-08 10:02 399 查看
简单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]);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj 优化