제출 #683064

#제출 시각아이디문제언어결과실행 시간메모리
683064vjudge1Knapsack (NOI18_knapsack)C++17
100 / 100
100 ms36276 KiB
#include <bits/stdc++.h>

#define ll long long
#define pb push_back
#define fi first
#define se second
#define int long long
#define pii pair<int, int>
#define tii tuple<int, int, int>
#define ed '\n'
#define task "D"

using namespace std;

const int M=1e9+7, N=2e3+3, INF=(int)1<<30;

int s, n, dp[N][N];
map<int, vector<pii>> item;
signed main()
{
	ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    if (fopen(task".inp","r")) {
		freopen(task".inp","r",stdin);
		freopen(task".out","w",stdout);
    }
    cin>>s>>n;
    for (int i=0; i<n; i++) {
        int val, w, copies;
        cin>>val>>w>>copies;
        item[w].pb({val, copies});
    }
    int it=1;
    for (auto &[w, items]: item) {
        sort(items.begin(), items.end(), greater<pii>());
        for (int i=0; i<=s; i++) {
            dp[it][i]=dp[it-1][i];
            int copies=0, ct=0, samew=0, sum=0;
            while ((copies+1)*w<=i && ct<items.size()) {
                sum+=items[ct].fi;
                copies++;
                if (dp[it-1][i-copies*w]!=-INF)
                    dp[it][i]=max(dp[it][i], dp[it-1][i-copies*w]+sum);
                samew++;
                if (samew==items[ct].se) {
                    samew=0;
                    ct++;
                }
            }
        }
        it++;
    }
    it--;
    /*for (int i=1; i<=it; i++) {
        for (int j=0; j<=s; j++) cout<<dp[i][j]<<" ";
        cout<<ed;
    }*/
    int ans=0;
    for (int i=1; i<=s; i++) ans=max(ans, dp[it][i]);
    cout<<ans<<ed;
}

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

knapsack.cpp: In function 'int main()':
knapsack.cpp:39:41: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |             while ((copies+1)*w<=i && ct<items.size()) {
      |                                       ~~^~~~~~~~~~~~~
knapsack.cpp:24:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   24 |   freopen(task".inp","r",stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
knapsack.cpp:25:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |   freopen(task".out","w",stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...