제출 #538010

#제출 시각아이디문제언어결과실행 시간메모리
538010gun_ganKnapsack (NOI18_knapsack)C++17
100 / 100
72 ms4892 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N = 1e5, S = 2e3 + 1;

ll n, s, dp[S];
vector<pair<ll,ll>> W[S];

int main(){
	cin.tie(0) -> ios_base::sync_with_stdio(0);

	cin >> s >> n;	
	if(n == 1)
	{
		long long v, w, k;
		cin >> v >> w >> k;
		cout << min(k, s / w) * v;
		return 0;
	}
	for(int i=0;i<n;i++)
	{
		int v, w, k;
		cin >> v >> w >> k;
		W[w].push_back({v, k});
	}
	ll mx = 0;
	for(int i=1;i<=s;i++)
	{
		if(W[i].empty()) continue;
		sort(W[i].rbegin(), W[i].rend());
		for(int j=s;j>=0;j--)
		{
			ll out_ptr = 0, in_taken = 0, all_taken = 0, sm = 0;
			while(out_ptr < W[i].size() && j - (all_taken + 1) * i >= 0)
			{
				all_taken++;
				in_taken++;
				sm += W[i][out_ptr].first;
				dp[j] = max(dp[j], dp[j - all_taken * i] + sm);
				if(in_taken == W[i][out_ptr].second)
				{
					in_taken = 0;
					out_ptr++;
				}
			}	
			mx = max(mx, dp[j]);
		}
	}
	// for(int i=0;i<=s;i++)
	// {
	// 	cout << dp[i] << " ";
	// }
	// cout << '\n';
	cout << mx;
	
}

컴파일 시 표준 에러 (stderr) 메시지

knapsack.cpp: In function 'int main()':
knapsack.cpp:35:18: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |    while(out_ptr < W[i].size() && j - (all_taken + 1) * i >= 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...