제출 #1267175

#제출 시각아이디문제언어결과실행 시간메모리
1267175cmiucKnapsack (NOI18_knapsack)C++20
100 / 100
72 ms1608 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
vector<pair<int,int>> Vec[2005];
int dp[2005];

int main(){
	int S, n, Ans = 0;
	cin>>S>>n;

	for (int i=1, v, w, k;i<=n;i++){
		cin>>v>>w>>k;
		Vec[w].push_back({v, k});
	}

	for (int i=1;i<=S;i++)
		dp[i] = -2e9;
	
	for (int i=1;i<=S;i++){
		int MaxI = S / i;
		sort(begin(Vec[i]), end(Vec[i]));

		while (MaxI > 0 and Vec[i].size() > 0){
			auto [v, k] = Vec[i].back();
			Vec[i].pop_back();
			for (int j=S;j>=i;j--)
				dp[j] = max(dp[j], dp[j - i] + v);
			if (k - 1)
				Vec[i].push_back({v, k-1});
			MaxI--;
		}
		Ans = max(Ans, dp[i]);
	}
	cout<<Ans<<'\n';
}
#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...