Submission #13293

#TimeUsernameProblemLanguageResultExecution timeMemory
13293gs14004Skyline (IZhO11_skyline)C++14
50 / 100
49 ms51152 KiB
#include <cstdio> #include <algorithm> using namespace std; int a[305],n; int dp[305][205][205]; int f(int pos, int p1, int p2){ if(pos == n) return 0; if(dp[pos][p1][p2]) return dp[pos][p1][p2]; int p3 = a[pos+2]; int ret = f(pos+1,p2,p3) + 3 * p1; if(pos + 1 < n){ int cut = min(p1,p2); ret = min(ret,f(pos+1,p2-cut,p3) + 5 * cut +3 * (p1 - cut)); } if(pos + 2 < n){ int cut = min(p1,min(p2,p3)); ret = min(ret,f(pos+1,p2-cut,p3-cut) + 7 * cut + 3 * (p1 - cut)); } return dp[pos][p1][p2] = ret; } int main(){ scanf("%d",&n); for (int i=0; i<n; i++) { scanf("%d",&a[i]); } printf("%d",f(0,a[0],a[1])); }
#Verdict Execution timeMemoryGrader output
Fetching results...