Submission #1273612

#TimeUsernameProblemLanguageResultExecution timeMemory
127361244100Knapsack (NOI18_knapsack)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define pub push_back
#define pob pop_back
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const ll Max=1e5+5,D=2e3+5;
ll W,n;
ll dp[Max],app[Max],c[Max],w[Max];
void sub1()
{
    ll i,j,k,cnt,ans;
    cnt=min(W/w[1],app[1]);
    ans=c[1]*cnt;
    cout<<ans;
    return;
}
void sub234()
{
    ll i,j,k,cnt,ans;
    for(i=1;i<=n;++i)
    {
        cnt=min(W/w[i],app[i]);
        for(k=1;k<=cnt;++k)
        {
            for(j=W;j>=w[i];--j)
                dp[j]=max(dp[j],dp[j-w[i]]+c[i]);
        }
    }
    /*for(i=1;i<=n;++i)
        cout<<dp[i]<<" ";
    cout<<"\n";*/
    cout<<dp[W];
    return;
}
void sub5()
{
    ///Nhận thấy với mỗi w[i] thì chỉ lấy tối đa được W/w[i] đồ như vậy, áp dụng ý tưởng này + tham lam: sort sao cho cùng w[i] thì c[i] max, sau đó làm tương tự sub 2,3,4, chú ý biến đổi app[i] theo từng lượt for
    ll i,j,k,cnt,ans,id;
    vector<pll> do[D];
    for(i=1;i<=n;++i)
    {
        if(w[i]>=D) continue;
        do[w[i]].pub({c[i],app[i]});
    }
    for(i=1;i<=W;++i)
    {
        if(do[i].empty()) continue;
        sort(do[i].begin(),do[i].end(),greater<ll>());
        id=0;
        for(k=1;k<=W/i;++k)
        {
            if(id>do[i].size()) break;
            for(j=W;j>=i;--j)
                dp[j]=max(dp[j],dp[j-i]+do[i][id].fi);
            --do[i][id].se;
            if(!do[i][id].se) ++id;
        }
    }
    cout<<dp[W];
    return;
}
int main()
{
    fast
    memset(dp,0,sizeof(dp));
    ll i,j,k,cnt,ans;
    cin>>W>>n;
    for(i=1;i<=n;++i)
        cin>>c[i]>>w[i]>>app[i];
    if(n==1)
    {
        sub1();
        return 0;
    }
    if(n<=100)
    {
        sub234();
        return 0;
    }
    sub5();
    return 0;
}

Compilation message (stderr)

knapsack.cpp: In function 'void sub5()':
knapsack.cpp:43:17: error: expected unqualified-id before 'do'
   43 |     vector<pll> do[D];
      |                 ^~
knapsack.cpp:47:12: warning: capture of variable 'w' with non-automatic storage duration
   47 |         do[w[i]].pub({c[i],app[i]});
      |            ^
knapsack.cpp:12:28: note: 'll w [100005]' declared here
   12 | ll dp[Max],app[Max],c[Max],w[Max];
      |                            ^
knapsack.cpp:47:13: error: expected ',' before '[' token
   47 |         do[w[i]].pub({c[i],app[i]});
      |             ^
      |             ,
knapsack.cpp:47:13: error: expected identifier before '[' token
knapsack.cpp: In lambda function:
knapsack.cpp:47:17: error: expected '{' before '.' token
   47 |         do[w[i]].pub({c[i],app[i]});
      |                 ^
knapsack.cpp: In function 'void sub5()':
knapsack.cpp:3:13: error: 'struct sub5()::<lambda()>' has no member named 'push_back'
    3 | #define pub push_back
      |             ^~~~~~~~~
knapsack.cpp:47:18: note: in expansion of macro 'pub'
   47 |         do[w[i]].pub({c[i],app[i]});
      |                  ^~~
knapsack.cpp:48:5: error: expected 'while' before '}' token
   48 |     }
      |     ^
knapsack.cpp:48:5: error: expected '(' before '}' token
   48 |     }
      |     ^
      |     (
knapsack.cpp:48:5: error: expected primary-expression before '}' token
knapsack.cpp:47:37: error: expected ')' before '}' token
   47 |         do[w[i]].pub({c[i],app[i]});
      |                                     ^
      |                                     )
   48 |     }
      |     ~                                
knapsack.cpp:47:37: error: expected ';' before '}' token
   47 |         do[w[i]].pub({c[i],app[i]});
      |                                     ^
      |                                     ;
   48 |     }
      |     ~                                
knapsack.cpp:51:12: error: expected primary-expression before 'do'
   51 |         if(do[i].empty()) continue;
      |            ^~
knapsack.cpp:51:12: error: expected ')' before 'do'
   51 |         if(do[i].empty()) continue;
      |           ~^~
      |            )
knapsack.cpp:52:14: error: expected primary-expression before 'do'
   52 |         sort(do[i].begin(),do[i].end(),greater<ll>());
      |              ^~
knapsack.cpp:52:28: error: expected primary-expression before 'do'
   52 |         sort(do[i].begin(),do[i].end(),greater<ll>());
      |                            ^~
knapsack.cpp:56:19: error: expected primary-expression before 'do'
   56 |             if(id>do[i].size()) break;
      |                   ^~
knapsack.cpp:56:19: error: expected ')' before 'do'
   56 |             if(id>do[i].size()) break;
      |               ~   ^~
      |                   )
knapsack.cpp:58:41: error: expected primary-expression before 'do'
   58 |                 dp[j]=max(dp[j],dp[j-i]+do[i][id].fi);
      |                                         ^~
knapsack.cpp:59:15: error: expected primary-expression before 'do'
   59 |             --do[i][id].se;
      |               ^~
knapsack.cpp:60:17: error: expected primary-expression before 'do'
   60 |             if(!do[i][id].se) ++id;
      |                 ^~
knapsack.cpp:60:17: error: expected ')' before 'do'
   60 |             if(!do[i][id].se) ++id;
      |               ~ ^~
      |                 )