Submission #703099

#TimeUsernameProblemLanguageResultExecution timeMemory
703099Quan2003Knapsack (NOI18_knapsack)C++17
0 / 100
7 ms10004 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<long long,long long> pii; const int N = 1e5 + 100; const int INF = 1e7 + 10; const int mod = 1e9 + 7; long long n,m,k,tot; int timer = 1; vector<long long>lf,ri; long long a[N + 1]; long long V[N + 1],W[N + 1],C[N + 1]; map<long long,long long>dp[N + 1]; int main(){ scanf("%d%d",&n,&k); map<long long,vector<pii>>books; long long high = 0; for(int i = 1; i <= n; i++) scanf("%d",&W[i]); for(int i = 1; i <= n; i++) scanf("%d",&V[i]); for(int i = 1; i <= n; i++) scanf("%d",&C[i]); for(int i = 1; i <= n; i++){ high = max(high ,W[i]); books[W[i]].push_back({V[i],C[i]}); } dp[0][0] = 0; int pos = 0; for(auto [cur,lst] : books){ sort(lst.rbegin(),lst.rend()); for(int i = 0; i <= k; i++){ dp[cur - 1][i] = dp[cur][i] = dp[pos][i]; int page = 0; int copy = 1; int ptr = 0; while(ptr < lst.size() and copy * cur <= i){ page += lst[ptr].first; if(dp[cur - 1].count(i - copy * cur)){ dp[cur][i] = max(dp[cur][i],dp[cur - 1][i - copy * cur] + page); // if(cur == 3) cout<<dp[cur][i]<<' '<<cur<<' '<<i<<endl; } copy++; if(copy == lst[ptr].second + 1){ copy = 1; ptr++; } } } pos = cur; } long long ans = dp[high][k]; printf("%d \n",ans); }

Compilation message (stderr)

knapsack.cpp: In function 'int main()':
knapsack.cpp:15:15: warning: format '%d' expects argument of type 'int*', but argument 2 has type 'long long int*' [-Wformat=]
   15 |       scanf("%d%d",&n,&k);
      |              ~^    ~~
      |               |    |
      |               int* long long int*
      |              %lld
knapsack.cpp:15:17: warning: format '%d' expects argument of type 'int*', but argument 3 has type 'long long int*' [-Wformat=]
   15 |       scanf("%d%d",&n,&k);
      |                ~^     ~~
      |                 |     |
      |                 int*  long long int*
      |                %lld
knapsack.cpp:18:43: warning: format '%d' expects argument of type 'int*', but argument 2 has type 'long long int*' [-Wformat=]
   18 |       for(int i = 1; i <= n; i++) scanf("%d",&W[i]);
      |                                          ~^  ~~~~~
      |                                           |  |
      |                                           |  long long int*
      |                                           int*
      |                                          %lld
knapsack.cpp:19:43: warning: format '%d' expects argument of type 'int*', but argument 2 has type 'long long int*' [-Wformat=]
   19 |       for(int i = 1; i <= n; i++) scanf("%d",&V[i]);
      |                                          ~^  ~~~~~
      |                                           |  |
      |                                           |  long long int*
      |                                           int*
      |                                          %lld
knapsack.cpp:20:43: warning: format '%d' expects argument of type 'int*', but argument 2 has type 'long long int*' [-Wformat=]
   20 |       for(int i = 1; i <= n; i++) scanf("%d",&C[i]);
      |                                          ~^  ~~~~~
      |                                           |  |
      |                                           |  long long int*
      |                                           int*
      |                                          %lld
knapsack.cpp:33:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |                while(ptr < lst.size() and copy * cur <= i){
      |                      ~~~~^~~~~~~~~~~~
knapsack.cpp:49:16: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long long int' [-Wformat=]
   49 |       printf("%d \n",ans);
      |               ~^     ~~~
      |                |     |
      |                int   long long int
      |               %lld
knapsack.cpp:15:12: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |       scanf("%d%d",&n,&k);
      |       ~~~~~^~~~~~~~~~~~~~
knapsack.cpp:18:40: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |       for(int i = 1; i <= n; i++) scanf("%d",&W[i]);
      |                                   ~~~~~^~~~~~~~~~~~
knapsack.cpp:19:40: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |       for(int i = 1; i <= n; i++) scanf("%d",&V[i]);
      |                                   ~~~~~^~~~~~~~~~~~
knapsack.cpp:20:40: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |       for(int i = 1; i <= n; i++) scanf("%d",&C[i]);
      |                                   ~~~~~^~~~~~~~~~~~
#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...