This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 = 0; 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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |