RT
是不是这个题本来就用不了三维数组
因为当 fi,0,0 与 fii,0,1 赋为极小值的时候虽然能过滤掉错解,但也会让正解变成负无穷。
感谢大佬!!!
#include<bits/stdc++.h>
#define int long long
#define N 1005
using namespace std;
int n,m,k,a[N],f[N][N][2];
signed main(){
scanf("%lld%lld%lld",&n,&k,&m);
for(int i=1;i<=n;i++){
scanf("%lld",a+i);
}
if(n/k>m){
puts("-1");
}else{
memset(f,-0x3f,sizeof f);
f[0][0][0]=0;
for(int i=1;i<=n;i++){
for(int w=1;w<=m;w++){
for(int j=1;j<=k && i-j>=1;j++){
if(f[i][w][0] < f[i-j][w][1]){
f[i][w][0]=f[i-j][w][1];
}
}
f[i][w][1]=max(f[i-1][w-1][1],f[i-1][w-1][0])+a[i];
}
}
printf("%lld",max(f[n][m][1] , f[n][m][0]));
}
return 0;
}