POJ 1651 Multiplication Puzzle
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1651 Multiplication Puzzle相关的知识,希望对你有一定的参考价值。
区间DP。dp[i][j]表示(i,j)开区间内全部取走的最小值。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int INF=0x7FFFFFFF; const int maxn=100+10; int a[maxn]; int dp[maxn][maxn]; int n; void init() { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dp[i][j]=INF; for(int i=1;i<=n;i++) if(i+2<=n) dp[i][i+2]=a[i]*a[i+1]*a[i+2]; } void work() { for(int i=4;i<=n;i++) { for(int j=1;j<=n;j++) { int st=j,en=st+i-1; if(en>n) continue; for(int s=st+1;s<=en-1;s++) //a[s]最后取走 { int now=0; if(s-st>=2) now=now+dp[st][s]; if(en-s>=2) now=now+dp[s][en]; now=now+a[st]*a[s]*a[en]; dp[st][en]=min(dp[st][en],now); } } } printf("%d\n",dp[1][n]); } int main() { while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); init(); work(); } return 0; }
以上是关于POJ 1651 Multiplication Puzzle的主要内容,如果未能解决你的问题,请参考以下文章
POJ - 1651 Multiplication Puzzle
题解POJ1651Multiplication Puzzle
poj-1651-Multiplication Puzzle--区间DP
POJ 1651 Multiplication Puzzle (区间DP)