APCS - 11301-4.cpp
本文最後更新於:2024年1月12日 下午
APCS - 11301-4.cpp
// Author : ysh
// 2024/01/12 Fri 16:48:01
#include<bits/stdc++.h>
using namespace std;
#define last(i,j) (f.at(j) - (i == 0 ? 0 : f.at(i - 1)))
vector<vector<int>>mark;
int check(vector<int>&f,int l,int r) {
if(l == r) return 0;
if(mark.at(l).at(r) != -1) return mark.at(l).at(r);
int mmin = INT_MAX;
for(int i = l;i<r;i++) {
mmin = min(check(f,l,i) + abs(last(l,i) - last(i + 1,r)) + check(f,i + 1,r),mmin);
}
// cout<<l<<" "<<r<<" "<<mmin<<"\n";
return mark.at(l).at(r) = mmin;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;cin>>n;
mark.resize(n,vector<int>(n,-1));
vector<int>f(n);
int last = 0;
for(int &i : f) {
cin>>i;
i = last += i;
}
cout<<check(f,0,n - 1);
return 0;
}
APCS - 11301-4.cpp
http://mysh212.github.io/algosolution/APCS-11301-4.cpp/