64pts求助!调了half an hour了,还是不行……
查看原帖
64pts求助!调了half an hour了,还是不行……
804607
rainygame楼主2023/5/5 20:15
#include <bits/stdc++.h>
using namespace std;
#define MAXN 3831

int n, b, ans;
int a[MAXN];
int f[MAXN][MAXN][2];

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n >> b;
	for (int i(1); i<=n; ++i) cin >> a[i];
	
	memset(f, -0x3f, sizeof(f));
	f[1][1][1] = f[0][0][0] = 0;
	
	for (int i(2); i<=n; ++i){
		f[i][0][0] = f[i-1][0][0];
		for (int j(1); j<=b; ++j){
			f[i][j][0] = max(f[i-1][j][0], f[i-1][j][1]);
			f[i][j][1] = max(f[i-1][j-1][0], f[i-1][j-1][1]+a[i]);
		}
	}
	ans = max(f[n][b][0], f[n][b][1]);
	
	memset(f, -0x3f, sizeof(f));
	f[1][1][1] = a[1];
	f[1][0][0] = 0;
	
	for (int i(2); i<=n; ++i){
		f[i][0][0] = f[i-1][0][0];
		for (int j(1); j<=b; ++j){
			f[i][j][0] = max(f[i-1][j][0], f[i-1][j][1]);
			f[i][j][1] = max(f[i-1][j-1][0], f[i-1][j-1][1]+a[i]);
		}
	}
	
	cout << max(ans, f[n][b][1]);
	
	return 0;
}

2023/5/5 20:15
加载中...