1 条题解

  • 0
    @ 2025-2-14 21:20:39

    C++ :

    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int N(103);
    int f[N][N],t[N],ans[N][2];
    int main()
    {
        int m,k,x,T;
        cin>>m>>k;
        for(int i=1;i<=m;i++)
        {
            cin>>x;
            t[i]=t[i-1]+x;
        }
        for(int i=1;i<=m;i++)
            f[i][1]=t[i];
        for(int i=1;i<=m;i++)
            for(int j=2;j<=k;j++)
            {
                f[i][j]=0x7fffffff;
                for(int k=i-1;k>=0;k--)
                    f[i][j]=min(f[i][j],max(f[k][j-1],t[i]-t[k]));
            }
        T=f[m][k];
        int e(m);
        for(int i=m,j=0;i>=1;i--)
        {
            if(t[e]-t[i-1]>T)
            {
                j++;
                ans[j][0]=i+1;
                ans[j][1]=e;
                e=i;i++;
            }
            ans[0][0]=j;
        }
        ans[0][0]++;
        int z=ans[0][0];
        ans[z][0]=1;
        ans[z][1]=e;
        for(int i=ans[0][0];i>=1;i--)
            printf("%d %d\n",ans[i][0],ans[i][1]);
        return 0;
    }
    

    Pascal :

    program acm3014;
    const maxn=100;
    var a,w,c:array[-1..maxn] of longint;
        f,g:array[0..maxn,0..maxn] of longint;
        i,j,k,n,m,x:longint;
    function max(x,y:longint):longint;
    begin
     if x>y then exit(x) else exit(y);
     end;
     function min(x,y:longint):longint;
     begin
      if x<y then exit(x) else exit(y);
     end;
    begin
      readln(m,n);
      for i:=1 to m do
        begin
    	  read(a[i]);
          w[i]:=w[i-1]+a[i];
    	end;
       fillchar(f,sizeof(f),$7f);
       for i:=1 to m do
        f[1,i]:=w[i];
       for i:=2 to n do
        for j:=i to m do
           begin
             for k:=i-1 to j-1 do
    	    begin
    		  x:=max(f[i-1,k],w[j]-w[k]);
    		  if x<f[i,j] then
                       begin
                         f[i,j]:=x;
                         g[i,j]:=k;
                       end;
    	     end;
           end;
       //writeln(f[n,m]);
       j:=0; x:=m;
       for i:=n downto 2 do
        begin
          inc(j); c[i]:=g[i,x];
          x:=g[i,x];
        end;
       c[1]:=0; c[n+1]:=m;
       for i:=1 to n do
        writeln(c[i]+1,' ',c[i+1]);
    end.
    		
    
    
    • 1

    信息

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