結果
| 問題 |
No.626 Randomized 01 Knapsack
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-12-15 21:27:17 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,389 bytes |
| コンパイル時間 | 742 ms |
| コンパイル使用メモリ | 72,704 KB |
| 実行使用メモリ | 199,424 KB |
| 最終ジャッジ日時 | 2024-12-15 15:04:35 |
| 合計ジャッジ時間 | 17,867 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 WA * 8 |
ソースコード
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct item{
long value, weight;
};
int n;
long W;
vector<item> items;
long dp[5000][5000];
long mod_number[5001];
long pack(int now, long weight_now){
if(now == n){
return 0;
}else if(dp[now][weight_now / ((W + mod_number[n] - 1) / mod_number[n] + 1)] != -1){
return dp[now][weight_now / ((W + mod_number[n] - 1) / mod_number[n] + 1)];
}else{
if(weight_now + items[now].weight > W){
return dp[now][weight_now / ((W + mod_number[n] - 1) / mod_number[n] + 1)] = pack(now + 1, weight_now);
}else{
return dp[now][weight_now / ((W + mod_number[n] - 1) / mod_number[n] + 1)] = max(pack(now + 1, weight_now), items[now].value + pack(now + 1, weight_now + items[now].weight));
}
}
}
int main(){
cin >> n >> W;
items.resize(n);
for(int i = 0; i < n; i++){
cin >> items[i].value >> items[i].weight;
}
for(int i = 0; i < 5000; i++){
for(int j = 0; j < 5000; j++){
dp[i][j] = -1;
}
}
mod_number[10] = 3000;
mod_number[25] = 3000;
mod_number[50] = 3000;
mod_number[125] = 3000;
mod_number[250] = 3000;
mod_number[500] = 2000;
mod_number[1000] = 3000;
mod_number[2000] = 4000;
mod_number[5000] = 3000;
cout << pack(0, 0) << endl;
}