제출 #1169130

#제출 시각아이디문제언어결과실행 시간메모리
11691304QT0RJelly Flavours (IOI20_jelly)C++20
54 / 100
82 ms16196 KiB
#include "jelly.h" #include <bits/stdc++.h> using namespace std; int find_maximum_unique(int x, int y, vector<int> a, vector<int> b){ int n = a.size(); int zeros=0; int mx=0; bool podz4=true,podz5=true; for (int i = 0; i<n; i++){ if (a[i]!=b[i])podz5=false; if (b[i]!=b[0])podz4=false; } if (podz4){ if (b[0]==0)return n; sort(a.begin(),a.end()); while(y>=b.back() && a.size()){ y-=b.back(); b.pop_back(); a.pop_back(); zeros++; n--; } vector<int> dp(x+1); for (int i = 0; i<n; i++){ if (!a[i]){ zeros++; continue; } for (int j = x; j>=a[i]; j--){ dp[j]=max(dp[j],dp[j-a[i]]+1); mx=max(mx,dp[j]); } } return mx+zeros; } if (podz5){ vector<vector<int>> dp(2000,vector<int>(2001,1e9+1)); for (int i = 0; i<n; i++)dp[i][0]=0; for (int i = 0; i<n; i++){ for (int j = i+1; j>0; j--){ dp[i][j]=min(dp[i][j],dp[i-1][j-1]+a[i]); } } int num=n-1,wyn=0,sum=x+y+1; for (int i = n; i>=0; i--){ if (dp[n-1][i]<=x+y){ wyn=i; sum=dp[n-1][i]; break; } } mx=wyn; vector<int> to_check; while(wyn){ if (dp[num][wyn]==dp[num-1][wyn-1]+a[num]){ to_check.push_back(a[num]); wyn--; } num--; } bitset<20001> bs; bs[0]=1; for (auto u : to_check)bs|=(bs<<u); for (int i = x; i>=max(0,sum-y); i--){ if (bs[i])return mx; } return max(0,mx-1); } vector<vector<int>> dp(x+1,vector<int>(y+1)); for (int i = 0; i<n; i++){ if (!a[i] || !b[i]){ zeros++; continue; } for (int j = x; j>=0; j--){ for (int u = y; u>=0; u--){ if (j>=a[i])dp[j][u]=max(dp[j][u],dp[j-a[i]][u]+1); if (u>=b[i])dp[j][u]=max(dp[j][u],dp[j][u-b[i]]+1); mx=max(mx,dp[j][u]); } } } return mx+zeros; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...