Submission #1326870

#TimeUsernameProblemLanguageResultExecution timeMemory
1326870DvcMinhKnapsack (NOI18_knapsack)C++20
29 / 100
1 ms1080 KiB
// vegnim
#include <bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair <int,int> pii;
typedef pair <ll,ll> pll;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define setpre(n) fixed << setprecision(n)
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
#define mask(n) (1LL << (n))
#define getbit(x, b) (((x) >> (b)) & 1)
#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
#define FORd(i, a, b) for (int i = (a); i >= (b); i--)
#define REP(i, n) for (int i = 0; i < (n); i++)
#define task ""
#define dbg if (DEBUG_MODE)
const bool DEBUG_MODE = 1;

const int maxN = 1e5+5, maxS = 2005;

int s,n,v[maxN],w[maxN],k[maxN];

namespace sub1
{
  void solve()
  {
    ll ans = 0;
    while (k[1]-- && s - w[1] >= 0){
      ans += v[1];
      s -= w[1];
    }
    cout << ans;
  }
}

namespace sub2
{
  const int maxN = 105;

  int dp[maxN][maxS];

  void solve()
  {
    FOR(i, 1, n){
      FOR(j, 0, s){
        dp[i][j] = dp[i-1][j];
        if (j >= w[i]) dp[i][j] = max(dp[i][j], v[i] + dp[i-1][j-w[i]]);
      }
    }
    cout << dp[n][s];
  }
}

signed main()
{
  ios_base::sync_with_stdio(NULL); cin.tie(nullptr);
  // freopen("inp.txt","r",stdin);
  bool issub2 = 1;
  cin >> s >> n;
  FOR(i, 1, n){
    cin >> v[i] >> w[i] >> k[i];
    if (k[i] != 1) issub2 = 0;
  }
  if (n == 1){
    sub1::solve();
    return 0;
  }
  if (issub2){
    sub2::solve();
    return 0;
  }
  return 0;
}
#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...