Submission #937258

#TimeUsernameProblemLanguageResultExecution timeMemory
937258LitusianoGym Badges (NOI22_gymbadges)C++17
24 / 100
1503 ms190364 KiB
// #pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math,inline") // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,lzcnt,mmx,abm,avx,avx2,fma") #include<bits/stdc++.h> using namespace std; #define int long long const int inf = 1e18; mt19937 rng((unsigned int) chrono::steady_clock::now().time_since_epoch().count()); bool cmp(pair<int,int> a, pair<int,int> b){ return a.second-a.first > b.second-b.first; } void shuffle(vector<pair<int,int>>& v){ int n = v.size(); for(int i = 0; i<3*n; i++){ int a = rng()%n; int b = rng()%n; swap(v[a],v[b]); } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; vector<pair<int,int>> v(n); for(auto& i : v) cin>>i.first; for(auto& i :v) cin>>i.second; // for(auto x : v) cout<<x.first<<" "<<x.second<<endl; if(n > 5000){ sort(v.begin(),v.end()); int s = 0; int ans = 0; for(int i = 0; i<n; i++){ if(s <= v[i].second){ s+=v[i].first; ans++; } } cout<<ans<<endl; return 0; } int mx = 0; int MAXN = 1e8; MAXN/=(n*n); for(int _ = 0; _<MAXN; _++){ shuffle(v); vector<vector<int>> dp(n+1, vector<int>(n+1,inf)); dp[0][0] = 0; for(int i = 1; i<=n; i++){ for(int j = 0; j<=n; j++){ dp[i][j] = dp[i-1][j]; // take i if(!j) continue; int act = dp[i-1][j-1]; if(act <= v[i-1].second) act+=v[i-1].first; else continue; dp[i][j] = min(dp[i][j],act); // cerr<<i<<" "<<j<<" "<<dp[i-1][j-1]<<" "<<v[i-1].second<<" "<<v[i-1].first<<" "<<dp[i][j]<<endl; } } for(int i = 0; i<=n; i++){ // cout<<dp[n][i]<<" "; if(dp[n][i] != inf) mx = max(mx,i); } } cout<<mx<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...