結果
| 問題 |
No.626 Randomized 01 Knapsack
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-12-22 20:18:45 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,154 bytes |
| コンパイル時間 | 831 ms |
| コンパイル使用メモリ | 77,208 KB |
| 実行使用メモリ | 394,464 KB |
| 最終ジャッジ日時 | 2024-12-17 23:17:33 |
| 合計ジャッジ時間 | 13,523 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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][10000];
long mod_number;
bool compare(item item1, item item2){
return item1.weight > item2.weight;
}
long pack(int now, long weight_now){
if(now == n){
return 0;
}else if(dp[now][weight_now / mod_number] != -1){
return dp[now][weight_now / mod_number];
}else{
if(weight_now + items[now].weight > W){
return dp[now][weight_now / mod_number] = pack(now + 1, weight_now);
}else{
return dp[now][weight_now / mod_number] = 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;
}
sort(items.begin(), items.end(), &compare);
for(int i = 0; i < 5000; i++){
for(int j = 0; j < 10000; j++){
dp[i][j] = -1;
}
}
mod_number = W / 10000 + 1;
cout << pack(0, 0) << endl;
}