78分求助
查看原帖
78分求助
335552
Christophe_楼主2021/8/14 18:10
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=4000;
int n,b,f[2][N][2],u[N];
int dp1(int n,int b) {
	memset(f,0xcf,sizeof(f));
	f[0][0][0]=0,f[1][1][1]=0;
	for(int i=1; i<=n; ++i)
		for(int j=1; j<=i&&j<=b; ++j) {
			f[i&1][j][0]=max(f[(i-1)&1][j][0],f[(i-1)&1][j][1]);
			f[i&1][j][1]=max(f[(i-1)&1][j-1][0],f[(i-1)&1][j-1][1]+u[i]);
		}
	return max(f[n&1][b][0],f[n&1][b][1]);
}
int dp2(int n,int b) {
	memset(f,0xcf,sizeof(f));
	f[0][0][0]=0,f[1][1][1]=u[1];
	for(int i=2; i<=n; ++i)
		for(int j=1; j<=i&&j<=b; ++j) {
			f[i&1][j][0]=max(f[(i-1)&1][j][0],f[(i-1)&1][j][1]);
			f[i&1][j][1]=max(f[(i-1)&1][j-1][0],f[(i-1)&1][j-1][1]+u[i]);
		}
	return f[n&1][b][1];
}
int main() {
	cin>>n>>b;
	for(int i=1; i<=n; ++i) cin>>u[i];
	cout<<max(dp1(n,b),dp2(n,b));
	return 0;
}

Wrong Answer, #1、#5、#13。

2021/8/14 18:10
加载中...