Submission #3768382


Source Code Expand

#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <unordered_set>
#include <unordered_map>
#include <bitset>
#include <limits>
#include <random>
#include <complex>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cassert>
using namespace std;

#define REP(i,n) for (int i = 0; i < n; i++)
template <class T> using reversed_priority_queue = priority_queue<T, vector<T>, greater<T> >;
typedef long long ll;

ll N,W;
vector < ll > v;
vector < ll > w;

ll dp[300010];

int main ()
{
    cin >> N >> W;
    v.resize(N);
    w.resize(N);
    REP(i,N) cin >> v[i] >> w[i];

    if (N <= 30) {
        REP(i,30 - N) {
            v.push_back(0);
            w.push_back(0);
        } 
        ll ans = 0;
        map < ll, ll > wt;
        REP(i,(1 << 15)) {
            ll sum_w = 0;
            ll sum_v = 0;
            REP(j,15) {
                if ((i >> j) & 1) {
                    sum_w += w[j];
                    sum_v += v[j];
                }
            }
            if (wt.find(sum_w) == wt.end()) {
                wt[sum_w] = sum_v;
            } else {
                wt[sum_w] = max(wt[sum_w], sum_v);
            }
            if (sum_w <= W) {
                ans = max(ans, sum_v);
            }
        }
        ll max_v = 0;
        vector < pair < ll,ll > > cnd;
        for (auto itr = wt.begin(); itr != wt.end(); itr++) {
            if (max_v < itr->second) {
                max_v = itr->second;
                cnd.push_back(make_pair(itr->first, itr->second));
            }
        }
        REP(i,(1 << 15)) {
            ll sum_w = 0;
            ll sum_v = 0;
            REP(j,15) {
                if ((i >> j) & 1) {
                    sum_w += w[j + 15];
                    sum_v += v[j + 15];
                }
            }
            if (sum_w <= W) {
                ans = max(ans, sum_v);
            }
            int l = 0, r = (int)cnd.size();
            while (r - l > 1) {
                int mid = (l + r) / 2;
                if (cnd[mid].first + sum_w <= W) l = mid;
                else r = mid;
            }
            if (sum_w + cnd[l].first <= W) {
                sum_v += cnd[l].second;
                ans = max(ans, sum_v);
            }
        }
        cout << ans << endl;
        return 0;
    }

    bool w_1000 = true;
    REP(i,N) {
        if (1000 < w[i]) {
            w_1000 = false;
        }
    }

    if (w_1000) {
        for (int i = 0; i < N; i++) {
            for (ll j = 250005; j >= 0; j--) {
                if (dp[j] > 0) {
                    dp[j + w[i]] = max(dp[j + w[i]], dp[j] + v[i]);
                }
            }
            dp[w[i]] = max(dp[w[i]], v[i]);
        }
        ll ans = 0;
        for (ll i = 0; i <= min(W, 300000LL); i++) {
            ans = max(ans, dp[i]);
        }
        cout << ans << endl;
        return 0;
    }

    fill (dp, dp + 300010, 1e18);
    dp[0] = 0;
    for (int i = 0; i < N; i++) {
        for (ll j = 250000; j >= 0; j--) {
            dp[j + v[i]] = min(dp[j + v[i]], dp[j] + w[i]);
        }
        dp[v[i]] = max(dp[v[i]], w[i]);
    }

    ll ans = 0;
    for (ll i = 0; i <= 300000; i++) {
        if (dp[i] <= W) {
            ans = max(ans, i);
        }
    }

    cout << ans << endl;

    return 0;
}

Submission Info

Submission Time
Task D - ナップサック問題
User kosakkun
Language C++14 (GCC 5.4.1)
Score 100
Code Size 3571 Byte
Status AC
Exec Time 69 ms
Memory 2560 KB

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3
Score / Max Score 0 / 0 34 / 34 33 / 33 33 / 33
Status
AC × 4
AC × 19
AC × 17
AC × 14
Set Name Test Cases
Sample subtask00_sample_1.txt, subtask00_sample_2.txt, subtask00_sample_3.txt, subtask00_sample_4.txt
Subtask1 subtask01_0.txt, subtask01_1.txt, subtask01_10.txt, subtask01_11.txt, subtask01_12.txt, subtask01_13.txt, subtask01_14.txt, subtask01_2.txt, subtask01_3.txt, subtask01_4.txt, subtask01_5.txt, subtask01_6.txt, subtask01_7.txt, subtask01_8.txt, subtask01_9.txt, subtask00_sample_1.txt, subtask00_sample_2.txt, subtask00_sample_3.txt, subtask00_sample_4.txt
Subtask2 subtask02_0.txt, subtask02_1.txt, subtask02_10.txt, subtask02_11.txt, subtask02_12.txt, subtask02_13.txt, subtask02_14.txt, subtask02_2.txt, subtask02_3.txt, subtask02_4.txt, subtask02_5.txt, subtask02_6.txt, subtask02_7.txt, subtask02_8.txt, subtask02_9.txt, subtask00_sample_1.txt, subtask00_sample_3.txt
Subtask3 subtask03_0.txt, subtask03_1.txt, subtask03_10.txt, subtask03_11.txt, subtask03_2.txt, subtask03_3.txt, subtask03_4.txt, subtask03_5.txt, subtask03_6.txt, subtask03_7.txt, subtask03_8.txt, subtask03_9.txt, subtask00_sample_1.txt, subtask00_sample_4.txt
Case Name Status Exec Time Memory
subtask00_sample_1.txt AC 5 ms 256 KB
subtask00_sample_2.txt AC 17 ms 2304 KB
subtask00_sample_3.txt AC 10 ms 256 KB
subtask00_sample_4.txt AC 10 ms 256 KB
subtask01_0.txt AC 17 ms 2304 KB
subtask01_1.txt AC 17 ms 2304 KB
subtask01_10.txt AC 16 ms 2304 KB
subtask01_11.txt AC 17 ms 2304 KB
subtask01_12.txt AC 16 ms 2304 KB
subtask01_13.txt AC 16 ms 2304 KB
subtask01_14.txt AC 16 ms 2304 KB
subtask01_2.txt AC 16 ms 2304 KB
subtask01_3.txt AC 16 ms 2304 KB
subtask01_4.txt AC 5 ms 256 KB
subtask01_5.txt AC 5 ms 256 KB
subtask01_6.txt AC 5 ms 256 KB
subtask01_7.txt AC 16 ms 2304 KB
subtask01_8.txt AC 16 ms 2304 KB
subtask01_9.txt AC 17 ms 2304 KB
subtask02_0.txt AC 43 ms 1024 KB
subtask02_1.txt AC 42 ms 1024 KB
subtask02_10.txt AC 42 ms 1024 KB
subtask02_11.txt AC 43 ms 1024 KB
subtask02_12.txt AC 42 ms 1024 KB
subtask02_13.txt AC 34 ms 256 KB
subtask02_14.txt AC 42 ms 1024 KB
subtask02_2.txt AC 43 ms 1024 KB
subtask02_3.txt AC 42 ms 1024 KB
subtask02_4.txt AC 42 ms 1024 KB
subtask02_5.txt AC 42 ms 1024 KB
subtask02_6.txt AC 42 ms 1024 KB
subtask02_7.txt AC 42 ms 1152 KB
subtask02_8.txt AC 42 ms 1024 KB
subtask02_9.txt AC 42 ms 1024 KB
subtask03_0.txt AC 68 ms 2560 KB
subtask03_1.txt AC 68 ms 2560 KB
subtask03_10.txt AC 68 ms 2560 KB
subtask03_11.txt AC 68 ms 2560 KB
subtask03_2.txt AC 68 ms 2560 KB
subtask03_3.txt AC 68 ms 2560 KB
subtask03_4.txt AC 68 ms 2560 KB
subtask03_5.txt AC 68 ms 2560 KB
subtask03_6.txt AC 68 ms 2560 KB
subtask03_7.txt AC 68 ms 2560 KB
subtask03_8.txt AC 69 ms 2560 KB
subtask03_9.txt AC 68 ms 2560 KB