1 条题解

  • 0
    @ 2023-12-7 13:13:37
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e2+5,M=11;
    int sum[N],f[N][M];
    int s1[N],s2[N],g[N][N][M];
    int main(){
    	int n,m,K;scanf("%d%d%d",&n,&m,&K);
    	if(m==1){
    		for(int i=1;i<=n;i++){
    			int x;scanf("%d",&x);
    			sum[i]=sum[i-1]+x;
    		}
    		for(int i=1;i<=n;i++){
    			for(int j=1;j<=K;j++){
    				f[i][j]=f[i-1][j];
    				for(int k=1;k<=i;k++){
    					f[i][j]=max(f[i][j],f[k-1][j-1]+sum[i]-sum[k-1]);
    				}
    			}
    		}
    		printf("%d",f[n][K]);
    	}
    	if(m==2){
    		for(int i=1;i<=n;i++){
    			int x,y;scanf("%d%d",&x,&y);
    			s1[i]=s1[i-1]+x;
    			s2[i]=s2[i-1]+y;
    		}
    		for(int i=1;i<=n;i++){
    			for(int j=1;j<=n;j++){
    				for(int k=1;k<=K;k++){
    					g[i][j][k]=max(g[i-1][j][k],g[i][j-1][k]);
    					for(int l=1;l<=i;l++){
    						g[i][j][k]=max(g[i][j][k],g[l-1][j][k-1]+s1[i]-s1[l-1]);
    					}
    					for(int l=1;l<=j;l++){
    						g[i][j][k]=max(g[i][j][k],g[i][l-1][k-1]+s2[j]-s2[l-1]);
    					}
    					if(i==j){
    						for(int l=1;l<=i;l++){
    							g[i][j][k]=max(g[i][j][k],g[l-1][l-1][k-1]+s1[i]-s1[l-1]+s2[i]-s2[l-1]);
    						}
    					}
    				}
    			}
    		}
    		printf("%d",g[n][n][K]);
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1084
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    19
    已通过
    9
    上传者