NYOJ737石子合并(一)

来源:互联网 发布:cf体验服网络出现异常 编辑:程序博客网 时间:2024/05/16 09:36
#include<stdio.h>#define N 205#define MAX0xfffffffint sum[N];int stone[N];int dp[N][N];int min(int a,intb){   return a<b?a:b;}int main(){   int n;   int i,j,d,k,add;  while(scanf("%d",&n)!=EOF)   {      sum[0]=stone[0]=0;      for(i=1;i<=n;i++)      {         scanf("%d",&stone[i]);         sum[i]=sum[i-1]+stone[i];//用于计算n块石头的重量         dp[i][i]=0;//把一块石头合并成一块石头不需要体力      }      for(d=1;d<n;d++)//将d+1块石头合并        for(i=1;i<=n-d;i++)        {           j=i+d;           dp[i][j]=MAX;           add=sum[j]-sum[i-1];           for(k=i;k<j;k++)            dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+add);        }        printf("%d\n",dp[1][n]);   }}



0 0
原创粉丝点击