Submission #2550773


Source Code Expand

#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <cmath>
#include <iomanip>
#include <numeric>
#include <functional>
#include <queue>
#include <tuple>
#include <map>

using namespace std;

using vi = vector<int>;
using vvi = vector<vi>;
using vs = vector<string>;
using ll = long long;
using vll = vector<ll>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vb = vector<char>;
using vvb = vector<vb>;
using vd = vector<double>;
using vvd = vector<vd>;

template<typename T>
vector<T> make_v(size_t a) { return vector<T>(a); }

template<typename T, typename... Ts>
auto make_v(size_t a, Ts... ts) {
    return vector<decltype(make_v<T>(ts...))>(a, make_v<T>(ts...));
}

template<typename T, typename V>
typename enable_if<is_class<T>::value == 0>::type
fill_v(T &t, const V &v) { t = v; }

template<typename T, typename V>
typename enable_if<is_class<T>::value != 0>::type
fill_v(T &t, const V &v) {
    for (auto &e:t) fill_v(e, v);
}

#define REP(i, a, b) for (int i = a; i < (int)(b); i++)
#define RREP(i, a, b) for (int i = (int)(b) - 1; i >= a; i--)
#define rep(i, n) REP(i, 0, n)
#define rrep(i, n) RREP(i, 0, n)
#define all(x) (x).begin(),(x).end()
#define iter(c) __typeof((c).begin())
#define tr(i, c) for (iter(c) i = (c).begin(); i != (c).end(); i++)
#define mp(a, b) make_pair(a,b)

#define fi first
#define sn second
#define decpii(p) p.fi--,p.sn--;


#ifdef LOCAL
#define dump(c) cerr << "> " << #c << " = " << (c) << endl;
#define dumpn(c) cerr << "> " << #c << " = " << (c) << ", ";
#else
#define dump(c) ;
#define dumpn(c) ;
#endif


template<typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
    return os << '(' << p.first << ',' << p.second << ')';
}

template<typename T>
ostream &operator<<(ostream &os, const vector<T> &a) {
    os << '[';
    rep(i, (int) a.size())os << (i ? " " : "") << a[i];
    return os << ']';
}


const int INF = 1 << 29;
const int MOD = 1000000007;

int dxf[] = {1, 0, -1, 0};
int dyf[] = {0, -1, 0, 1};

template<class T>
bool chmax(T &a, const T &b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}

template<class T>
bool chmin(T &a, const T &b) {
    if (b < a) {
        a = b;
        return true;
    }
    return false;
}

inline vi uni(vi &vec) {
    sort(vec.begin(), vec.end());
    vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
    return vec;
}

struct ____ {
    ____() {
        cin.tie(0);
        ios::sync_with_stdio(0);
        cout << fixed << setprecision(20);
    };
} ________;


ll solve() {
    ll N, W;
    cin >> N >> W;

    vi v(N, 0), w(N, 0);
    rep(i, N)cin >> v[i] >> w[i];
    ll mxv = *max_element(all(v));
    ll mxw = *max_element(all(w));

    if (N <= 30) {
        int s2 = N / 2;
        int s1 = N - s2;

        vector<pll> b1(1 << s1), b2(1 << s2);
        rep(M, 1 << s1) {
            pll wv = mp(0, 0);
            rep(i, s1) {
                if (((M >> i) & 1) == 1) {
                    wv.fi += w[i];
                    wv.sn += v[i];
                }
            }
            b1[M] = wv;
        }
        rep(M, 1 << s2) {
            pll wv = mp(0, 0);
            rep(i, s2) {
                if (((M >> i) & 1) == 1) {
                    wv.fi += w[i+s1];
                    wv.sn += v[i+s1];
                }
            }
            b2[M] = wv;
        }

//        dumpn(b1); dump(b2);

        sort(all(b2));
        ll b2_mxv = 0;
        tr(it,b2) {
            chmax(b2_mxv, it->second);
            it->second = b2_mxv;
        }
//        dump(b2);
        ll max_v = 0;
        tr(it, b1) {
            if(it->first > W) continue;
            ll v = it->second;
            ll tw = W - (it->first);
            auto u = upper_bound(all(b2), mp(tw, 1ll<<50));
//            dumpn(u != begin(b2));
            if (u != begin(b2)) {
                --u;
                v += u->second;
            }
//            dumpn(tw);
//            dumpn(*it);
//            dumpn(*u);
//            dump(v);
            chmax(max_v, v);
        }
        return max_v;
    } else if (mxv <= 1000) {

    } else {

    }

    return -1LL;
}


int main() {
//    cout << (solve() ? "yes" : "no") << endl;
    cout << solve() << endl;
//    solve();
    return 0;
}

Submission Info

Submission Time
Task D - ナップサック問題
User palpal
Language C++14 (GCC 5.4.1)
Score 34
Code Size 4496 Byte
Status WA
Exec Time 7 ms
Memory 1280 KB

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3
Score / Max Score 0 / 0 34 / 34 0 / 33 0 / 33
Status
AC × 4
AC × 19
AC × 2
WA × 15
AC × 2
WA × 12
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 1 ms 256 KB
subtask00_sample_2.txt AC 7 ms 1280 KB
subtask00_sample_3.txt AC 1 ms 256 KB
subtask00_sample_4.txt AC 1 ms 256 KB
subtask01_0.txt AC 7 ms 1280 KB
subtask01_1.txt AC 7 ms 1280 KB
subtask01_10.txt AC 7 ms 1280 KB
subtask01_11.txt AC 7 ms 1280 KB
subtask01_12.txt AC 7 ms 1280 KB
subtask01_13.txt AC 7 ms 1280 KB
subtask01_14.txt AC 7 ms 1280 KB
subtask01_2.txt AC 7 ms 1280 KB
subtask01_3.txt AC 7 ms 1280 KB
subtask01_4.txt AC 6 ms 1280 KB
subtask01_5.txt AC 7 ms 1280 KB
subtask01_6.txt AC 6 ms 1280 KB
subtask01_7.txt AC 7 ms 1280 KB
subtask01_8.txt AC 7 ms 1280 KB
subtask01_9.txt AC 7 ms 1280 KB
subtask02_0.txt WA 1 ms 256 KB
subtask02_1.txt WA 1 ms 256 KB
subtask02_10.txt WA 1 ms 256 KB
subtask02_11.txt WA 1 ms 256 KB
subtask02_12.txt WA 1 ms 256 KB
subtask02_13.txt WA 1 ms 256 KB
subtask02_14.txt WA 1 ms 256 KB
subtask02_2.txt WA 1 ms 256 KB
subtask02_3.txt WA 1 ms 256 KB
subtask02_4.txt WA 1 ms 256 KB
subtask02_5.txt WA 1 ms 256 KB
subtask02_6.txt WA 1 ms 256 KB
subtask02_7.txt WA 1 ms 256 KB
subtask02_8.txt WA 1 ms 256 KB
subtask02_9.txt WA 1 ms 256 KB
subtask03_0.txt WA 1 ms 256 KB
subtask03_1.txt WA 1 ms 256 KB
subtask03_10.txt WA 1 ms 256 KB
subtask03_11.txt WA 1 ms 256 KB
subtask03_2.txt WA 1 ms 256 KB
subtask03_3.txt WA 1 ms 256 KB
subtask03_4.txt WA 1 ms 256 KB
subtask03_5.txt WA 1 ms 256 KB
subtask03_6.txt WA 1 ms 256 KB
subtask03_7.txt WA 1 ms 256 KB
subtask03_8.txt WA 1 ms 256 KB
subtask03_9.txt WA 1 ms 256 KB