Submission #243662

#TimeUsernameProblemLanguageResultExecution timeMemory
243662GREGOIRELCBali Sculptures (APIO15_sculpture)C++14
21 / 100
1093 ms5496 KiB
#include <iostream> using namespace std; #define int long long const int MAX_STATUE = 2000 + 1; const int MAX_BITS = 41; int nbStatue; int minBar, maxBar; int valStatue[MAX_STATUE]; int cumul[MAX_STATUE]; int dp[MAX_STATUE][MAX_STATUE]; int curNb = 0; bool estOblige(int curBit) { int maxi = curNb + (1ll << curBit); dp[0][0] = curBit + 1; for(int iPos = 1; iPos <= nbStatue; iPos++) { for(int iDeb = 0; iDeb < iPos; iDeb++) { //cout << (curNb | (cumul[iPos] - cumul[iDeb])) << " " << maxi << endl; if((curNb | (cumul[iPos] - cumul[iDeb])) < maxi) { for(int k = minBar - 1; k < maxBar; k++) { if(dp[iDeb][k] == curBit + 1) { dp[iPos][k + 1] = curBit + 1; } } } } } for(int k = minBar; k <= maxBar; k++) { if(dp[nbStatue][k] == curBit + 1) { return false; } } return true; } int32_t main() { ios::sync_with_stdio(false); cin >> nbStatue >> minBar >> maxBar; for(int iStatue = 1; iStatue <= nbStatue; iStatue++) { cin >> valStatue[iStatue]; cumul[iStatue] += cumul[iStatue - 1]; cumul[iStatue] += valStatue[iStatue]; } for(int iBit = MAX_BITS; iBit > -1; iBit--) { if(estOblige(iBit)) { //cout << iBit << endl; curNb += (1ll << iBit); } } cout << curNb << 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...
#Verdict Execution timeMemoryGrader output
Fetching results...