poj 1651

来源:互联网 发布:limit mysql 性能 编辑:程序博客网 时间:2024/06/07 19:02

题目链接:点击打开链接

题目大意:一串数,相邻的3个数相乘,消去中间这个数,直至全部消失。求最大的结果,详见题目

题目分析:由于首尾不能取走,所以枚举中间的数,然后又分为了2段


#include<stdio.h>#include<stdlib.h>#include<iostream>#include<string.h>#define INF 0x3f3f3f3fusing namespace std;int dp[105][105];int main(){   int n,i,num[105],len,j;   while(scanf("%d",&n)!=EOF)   {      memset(num,0,sizeof(num));      for(i=1;i<=n;i++)         scanf("%d",&num[i]);      for(i=1;i<n-1;i++)         dp[i][i+2]=num[i]*num[i+1]*num[i+2];      for(len=4;len<=n;len++)      {         for(i=1;i<=n-len+1;i++)         {             dp[i][i+len-1]=INF;             for(j=i+1;j<i+len-1;j++)             dp[i][i+len-1]=min(dp[i][i+len-1],dp[i][j]+dp[j][i+len-1]+num[i]*num[j]*num[i+len-1]);            }      }      printf("%d\n",dp[1][n]);   }   return 0;}


原创粉丝点击