1. 程式人生 > >ACM - Bone Collector (HDU 2602)

ACM - Bone Collector (HDU 2602)

Bone Collector

#include <iostream>
#include <algorithm>

#define MAX 1010	

using namespace std;

struct Bone {
	int value;
	int volume;

} bones[MAX];
int dp[MAX][MAX];
int n, v;

void init() {
	scanf_s("%d %d", &n, &v);
	for (int i = 0; i < n; i++) {
		scanf_s("%d", &
bones[i].value); for (int j = 0; j < n; j++) { dp[i][j] = 0; } } for (int i = 0; i < n; i++) { scanf_s("%d", &bones[i].volume); } } void collectBone(int number, int volume) { for (int i = 1; i <= number; i++) { for (int j = 0; j <= volume; j++) { if (j < bones[i - 1
].volume) { dp[i][j] = dp[i - 1][j]; } else { dp[i][j] = max(dp[i - 1][j - bones[i - 1].volume] + bones[i - 1].value, dp[i - 1][j]); } } } } void solve() { collectBone(n, v); cout << dp[n][v] << endl; } int main() { int t; cin >> t; while (t--) { init
(); solve(); } return 0; }