Memory 828K
Time 422MS
#include <iostream>
using namespace std;
//最大价值 3402 * 100 = 340200 在int范围内
int num[2][12881];
int w[3403];//重量
int v[3403];//价值
int flag;
int main()
{
int n,m;
cin >> n >> m;
for(int i = 0; i < n; ++i){
cin >> w[i] >> v[i];
}
for(int i = w[0]; i <= m; ++i){
num[flag][i] = v[0];
}
for(int i = 1; i < n; ++i){
for(int j = 0; j <= m; ++j)
num[!flag][j] = num[flag][j];
for(int j = w[i]; j <= m; ++j){
num[flag][j] = max(num[!flag][j-w[i]]+v[i],num[!flag][j]);
}
}
cout << num[flag][m] << endl;
return 0;
}
Memory 5372K
Time 3204MS
import java.io.IOException;
import java.util.Scanner;
public class Main {
static int[][] num = new int[2][12881];
static int[] w = new int[3403];//重量
static int[] v = new int[3403];//价值
static int flag = 0;
public static void main(String[] args) throws IOException{
//最大价值 3402 * 100 = 340200 在int范围内
Scanner cin = new Scanner(System.in);
int n,m;
n = cin.nextInt();
m = cin.nextInt();
for(int i = 0; i < n; ++i){
w[i] = cin.nextInt();
v[i] = cin.nextInt();
}
for(int i = w[0]; i <= m; ++i){
num[flag][i] = v[0];
}
for(int i = 1; i < n; ++i){
for(int j = 0; j <= m; ++j)
num[flag+1][j] = num[flag][j];
for(int j = w[i]; j <= m; ++j){
num[flag][j] = Math.max(num[flag+1][j-w[i]]+v[i],num[flag+1][j]);
}
}
System.out.println(num[flag][m]);
}
}