这题咋回事呀
查看原帖
这题咋回事呀
319509
dd13613311929楼主2023/11/5 10:07

这段代码样例都不对,但AC了

#include<bits/stdc++.h>
using namespace std;
const int N=110,M=15;
int n,m,K;
int s1[N],s2[N],dp[N][M],f[N][N][M];
int main(){
	scanf("%d%d%d",&n,&m,&K);
	if(m==1){
		for(int i=1,x;i<=n;i++) {
			scanf("%d",&x);
			s1[i]=s1[i-1]+x;
		}
		for(int k=1;k<=K;k++){
			for(int i=1;i<=n;i++){
				dp[i][k]=dp[i-1][k];
				for(int j=1;j<i;j++) dp[i][k]=max(dp[i][k],dp[j][k-1]+s1[i]-s1[j]); 
			}
		}
		printf("%d\n",dp[n][K]);
	}
	else{
		for(int i=1,x,y;i<=n;i++){
			scanf("%d%d",&x,&y);
			s1[i]=s1[i-1]+x,s2[i]=s2[i-1]+y;
		}
		for(int k=1;k<=K;k++){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++){
                    f[i][j][k]=max(f[i-1][j][k],f[i][j-1][k]);
                    for(int l=1;l<i;l++) f[i][j][k]=max(f[i][j][k],f[l][j][k-1]+s1[i]-s1[l]);
                    for(int l=1;l<j;l++) f[i][j][k]=max(f[i][j][k],f[i][l][k-1]+s2[j]-s2[l]);
                    if(i==j)  for(int l=1;l<i;l++) f[i][j][k]=max(f[i][j][k],f[l][l][k-1]+s1[i]-s1[l]+s2[j]-s2[l]);
                }
            }
        }
        printf("%d\n",f[n][n][K]);
	}
	return 0;
} 
2023/11/5 10:07
加载中...