蓝桥杯练习系统 合并石子

来源:互联网 发布:java实用教程第4版答案 编辑:程序博客网 时间:2024/06/13 12:23

蓝桥杯练习系统试题

#include<stdio.h>#include<stdlib.h>#include<string.h>int dp[1000][1000];int d[1000][1000];void f(int n,int shi[]){    for(int i=0;i<n;i++)    {        dp[i][i]=0;    }    for(int r=2;r<=n;r++)    for(int i=0;i<n-r+1;i++)    {        int j=i+r-1;        dp[i][j]=d[i][i]+d[i+1][j]+dp[i][i]+dp[i+1][j];        for(int k=i+1;k<j;k++)        {            int t;            t=d[i][k]+d[k+1][j]+dp[i][k]+dp[k+1][j];            if(t<dp[i][j])            dp[i][j]=t;        }    }}int main(){    int n;    int shi[1000];    scanf("%d",&n);    for(int i=0;i<n;i++)    {        scanf("%d",&shi[i]);    }    for(int i=0;i<n;i++)    {        d[i][i]=shi[i];    }    for(int i=0;i<n;i++)    {        for(int j=i+1;j<n;j++)        {            d[i][j]=d[i][j-1]+shi[j];        }    }    f(n,shi);    printf("%d",dp[0][n-1]);    return 0;}
0 0