제출 #735453

#제출 시각아이디문제언어결과실행 시간메모리
735453vjudge1Knapsack (NOI18_knapsack)C++98
100 / 100
311 ms38196 KiB
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>
using namespace std;

#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
using vi = vector<int>;
using ll = long long;
using pii = pair<ll, int>;

const int MAXN = 100000 + 7;
const int MAXM = 2023;
int V[MAXN], W[MAXN], K[MAXN];
vector<pii> item[MAXM];
ll dp[MAXM][MAXM];

int main() {
	ios::sync_with_stdio(false);
    int S, N;
    cin >> S >> N;
    //unordered_map<int, vector<pii>> item;
    for (int i = 0; i < N; i++) {
        cin >> V[i] >> W[i] >> K[i];
        item[W[i]].push_back(make_pair(V[i], K[i]));
    } 
    for (int i = 0; i <= S; i++) {
        sort(all(item[i]));
        reverse(all(item[i]));
    }
    memset(dp, 0xff, sizeof(dp));
    dp[0][0] = 0;
    for (int i = 1; i <= S; i++) {
        for (int j = 0; j <= S; j++) {
            if (dp[i - 1][j] != -1) dp[i][j] = max(dp[i][j], dp[i - 1][j]);
            int cnt = 0, w = i;
            ll v = 0;
            for (int it = 0; it < item[i].size(); it++) {
                for (int k = 0; k < item[i][it].second && cnt < (S / w); k++) {
                    cnt++;
                    v += item[i][it].first;
                    if (j - cnt * w >= 0 && dp[i - 1][j - cnt * w] != -1) {
                        dp[i][j] = max(dp[i][j], dp[i - 1][j - cnt * w] + v);
                    }
                }
                if (cnt > (S / w)) break;
            }
        }
    }
    ll res = 0;
    for (int i = 0; i <= S; i++) {
        res = max(res, dp[S][i]);
    }
    cout << res << endl;
}	

컴파일 시 표준 에러 (stderr) 메시지

knapsack.cpp: In function 'int main()':
knapsack.cpp:53:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |             for (int it = 0; it < item[i].size(); it++) {
      |                              ~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...