제출 #629469

#제출 시각아이디문제언어결과실행 시간메모리
629469leeminhduc2Knapsack (NOI18_knapsack)C++17
73 / 100
1064 ms1804 KiB
#include <bits/stdc++.h>
#define ll int
#define ft first
#define sc second
using namespace std;
const int N=1e5+10;
ll s,n,v[N],w[N],k[N],dp[N];
void lulu_solution()
{
    cin >> s >> n;
    memset(dp,-0x3f,sizeof(dp));
    dp[0]=0ll;
    for (ll i=1; i<=n; i++)
    {
        cin >> v[i] >> w[i] >> k[i];
        for (ll st=0; st<w[i]; st++)
        {
            deque<pair<ll,ll>> dq;
            for (ll j=st; j<=s; j+=w[i])
            {
                ll prev=dp[j]-((j-st)/w[i])*v[i];
                while (dq.size()&&(j-dq.front().ft)/w[i]>k[i]) dq.pop_front();
                while (dq.size()&&dq.back().sc<prev) dq.pop_back();
                dq.push_back({j,prev});
                if (j!=st)
                {
                    dp[j]=max(dp[j],((j-st)/w[i])*v[i]+dq.front().sc);
                }
            }
        }
    }
   // for (int i=0;i<=s;i++) cout << dp[i] << " ";
    cout << *max_element(dp,dp+s+1);
}
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    lulu_solution();
}
#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...