Submission #1303953

#TimeUsernameProblemLanguageResultExecution timeMemory
1303953haron1337Knapsack (NOI18_knapsack)C++17
100 / 100
48 ms3092 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define pb push_back
#define ii pair<int , int>
#define iii pair<int , pair<int , int>>
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define fod(i,r,l) for(int i=r;i>=l;i--)
#define file "file"

const int N = 1e5 + 5, mod = 1e9 + 7;
int n , W , cnt[2005] , k[N];
int dp[2005];

struct item
{
    int v , w , k;
} a[N];

bool cmp(item a , item b)
{
    return a.v > b.v;
}
 
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);  cout.tie(0);
    //freopen(file".INP" , "r" , stdin);
    //freopen(file".OUT" , "w" , stdout);
 
    cin >> W >> n;
    fo(i, 1, W)
        cnt[i] = W / i;
    fo(i, 1, n)
        cin >> a[i].v >> a[i].w >> a[i].k;  
    sort(a + 1 , a + n + 1 , cmp);

    vector <int> v , w;
    v.push_back(0);
    w.push_back(0);

    int m = 0;
    fo(i, 1, n)
    {
        while (cnt[a[i].w] > 0 && a[i].k > 0)
        {
            v.push_back(a[i].v);
            w.push_back(a[i].w);
            a[i].k--;
            cnt[a[i].w]--;
            m++;
        }
    }

    fo(i, 1, m)
    fod(j, W, w[i])
    {
        dp[j] = max(dp[j] , dp[j - w[i]] + v[i]);
    }

    cout << dp[W];
}
// haronnee_
#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...