1 条题解

  • 0
    @ 2023-3-13 12:11:10

    C++ :

    #include <iostream>
    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    #define M 101
    #define INF 1000000000
    int n,f[M][M],sum[M][M],stone[M];
    int main()
    {
        int i,j,k,t;
        cin>>n;
        for(i=1;i<=n;i++)
            scanf("%d",&stone[i]);
    
        for(i=1;i<=n;i++)
        {
            f[i][i]=0;
            sum[i][i]=stone[i];
            for(j=i+1;j<=n;j++)
                sum[i][j]=sum[i][j-1]+stone[j];
        }
    
        for(int len=2;len<=n;len++)
        {
            for(i=1;i<=n-len+1;i++)
            {
                j=i+len-1;
                f[i][j]=INF;
                for(k=i;k<=j-1;k++)
                {
                    if(f[i][j]>f[i][k]+f[k+1][j]+sum[i][j])
                        f[i][j]=f[i][k]+f[k+1][j]+sum[i][j];
                }
            }
        }
        printf("%d\n",f[1][n]);
        return 0;
    }
    
    

    Pascal :

    uses math;
    var
      i,n,k,l,x:longint;
    	f:array[0..101,0..101]of longint;
    	s:array[0..101]of longint;
    begin
      fillchar(f,sizeof(f),$7f div 3);
      readln(n);
    	s[0]:=0;
    	for i:=1 to n do
    	begin
    	  read(x);
    		f[1,i]:=0;
    		s[i]:=s[i-1]+x;
    	end;
    	for l:=2 to n do
    	  for x:=1 to n-l+1 do
    			begin
    				for k:=1 to l-1 do f[l,x]:=min(f[l,x],f[k,x]+f[l-k,x+k]);
    				f[l,x]:=f[l,x]+s[x+l-1]-s[x-1];
    			end;
    	write(f[n,1]);
    end.
    
    • 1

    信息

    ID
    2112
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者