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...