poj1651Multiplication Puzzle 区间dp

来源:互联网 发布:java ee安装教程 编辑:程序博客网 时间:2024/06/04 18:10

点击打开链接

#include<iostream>#include<string>#include<cstring>#include<cstdio>#include<cmath>#include<iomanip>#include<map>#include<algorithm>#include<queue>#include<set>#define inf 1000000000#define pi acos(-1.0)#define eps 1e-8#define seed 131using namespace std;typedef pair<int,int> pii;typedef unsigned long long ULL;typedef long long LL;const int maxn=100005;int d[105];int dp[105][105];int n;int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)        scanf("%d",&d[i]);    for(int i=2;i<n;i++)    {        dp[i][i]=d[i-1]*d[i]*d[i+1];        dp[i][i-1]=0;        dp[i+1][i]=0;    }    for(int l=2;l<=n-2;l++)    {        for(int i=2;i<n;i++)        {            int j=i+l-1;            if(j<n)            {                dp[i][j]=inf;                for(int k=i;k<=j;k++)                {                    dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k+1][j]+d[i-1]*d[k]*d[j+1]);                }            }        }    }    cout<<dp[2][n-1];    return 0;}


0 0
原创粉丝点击