Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5442 | Accepted: 3286 |
Description
Input
Output
Sample Input
6 10 1 50 50 20 5
Sample Output
3650
Source
Northeastern Europe 2001, Far-Eastern Subregion
相当于矩阵连乘,很基础的一个区间DP。。
/**************************************************** * author:crazy_石头 * Pro:POJ 1651 * algorithm:区间DP * Time:32ms * Judge Status:Accepted *******************************************************/ #pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <vector> #include <algorithm> #include <cmath> using namespace std; #define rep(i,h,n) for(int i=(h);i<=(n);i++) #define ms(a,b) memset((a),(b),sizeof(a)) #define eps 1e-8 #define INF 1<<29 #define LL __int64 const int maxn=100+5; int a[maxn]; int dp[maxn][maxn]; inline int dfs(int l, int r) { if (dp[l][r]!=0) return dp[l][r]; if (r==1+l) return 0; if (r==2+l) return dp[l][r]=a[l]*a[l+1]*a[r]; int ans=INF; rep(i,l+1,r-1) ans=min(ans,dfs(l,i)+dfs(i,r)+a[l]*a[i]*a[r]); return dp[l][r]=ans; } int main() { int n; scanf("%d",&n); rep(i,0,n-1) scanf("%d", &a[i]); printf("%d\n", dfs(0,n-1)); return 0; }