Submission #886429

#TimeUsernameProblemLanguageResultExecution timeMemory
886429vjudge1Gym Badges (NOI22_gymbadges)C++17
9 / 100
184 ms17492 KiB
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,abm,mmx,sse4.2,fma,lzcnt,popcnt")
#include <bits/stdc++.h>
using namespace std;

#define int int64_t
#define PB push_back
#define sqr(a) ((a)*(a))
#define I insert
#define F first
#define S second

bool cmp(pair<int,int> const&a, pair<int,int> const&b) {
	return make_pair(a.S, a.F) < make_pair(b.S, b.F);
}

int32_t main() {
	cin.tie(0)->sync_with_stdio(0);
	int n;
	cin>>n;
	vector<pair<int,int>> a(n);
	for(int i=0; i<n; i++) cin>>a[i].S;
	for(int i=0; i<n; i++) cin>>a[i].F;
	sort(a.begin(), a.end());
	if(a[0].F==a[n-1].F) {
		sort(a.begin(), a.end(), cmp);
		int ans = 0, cur = 0;
		for(int i=0; i<n; i++) {
			if(cur <= a[0].F) {
				cur += a[i].S;
				ans++;
			}
			else {
				cout<<ans<<'\n';
				return 0;
			}
		}
	}
	vector<int> dp(n+1, INT_MAX);
	dp[0] = 0;
	for(int i=0; i<n; i++) {
		for(int j=n; j>0; j--) {
			dp[j] = min((dp[j-1]<=a[i].F)?(dp[j-1] + a[i].S):INT_MAX, dp[j]);
		}
	}
	for(int i=n; i>=0; i--) {
		if(dp[i]!=INT_MAX){
			cout<<i<<'\n';
			break;
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...