78pts求助(玄关)
查看原帖
78pts求助(玄关)
1287433
__ycy1124__楼主2024/9/24 17:55
#include<bits/stdc++.h>
using namespace std;
int dp[3831][3831][2];
int u[3831];
int main(){
	int n,b;
	int ans=0;
	scanf("%d%d",&n,&b);
	for(int i=1;i<=n;i++){
		scanf("%d",&u[i]);
	}
	for(int i=2;i<=n;i++){
		dp[i][0][0]=dp[i-1][0][0];
		for(int j=1;j<=b;j++){
			if(j>=2)
				dp[i][j][1]=max(dp[i-1][j-1][0],dp[i-1][j-1][1]+u[i]);
			dp[i][j][0]=max(dp[i-1][j][1],dp[i-1][j][0]);
//			printf("%d %d %d %d\n",i,j,dp[i][j][0],dp[i][j][1]);
		}
	}
	ans=max(dp[n][b][0],dp[n][b][1]);
	for(int i=0;i<=n;i++){
		for(int j=0;j<=b;j++){
			dp[i][j][0]=dp[i][j][1]=0;
		}
	}
	dp[1][1][1]=u[1];
	for(int i=2;i<=n;i++){
		dp[i][0][0]=max(dp[i-1][0][0],dp[i-1][0][1]);
		for(int j=1;j<=b;j++){
			if(j>=2)
				dp[i][j][1]=max(dp[i-1][j-1][0],dp[i-1][j-1][1]+u[i]);
			dp[i][j][0]=max(dp[i-1][j][1],dp[i-1][j][0]);
//			printf("%d %d %d %d\n",i,j,dp[i][j][0],dp[i][j][1]);
		}
	}
	ans=max(dp[n][b][0],max(ans,dp[n][b][1]));
	printf("%d",ans);
	return 0;
}
2024/9/24 17:55
加载中...