40分dp求调
查看原帖
40分dp求调
688956
daitangchen2008楼主2024/8/24 08:01
#include<bits/stdc++.h>
#define int long long
using namespace std;
int dp[105][105][6060];
int a[105][105];
signed main()
{
	int n,K;
	cin>>n>>K;
	for(int i=1;i<=n;i++)
		for(int j=0;j<=n;j++)
			for(int k=0;k<=K;k++)
				dp[i][j][k]=-3e15;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=i;j++)
			cin>>a[i][j];
	for(int i=1;i<=n;i++) 
		for(int j=1;j<=i;j++)
			for(int k=0;k<=K&&k<=i;k++)
				{
					dp[i][j][k]=max(dp[i-1][j][k],dp[i-1][j-1][k])+a[i][j];
					if(k!=0)
					dp[i][j][k]=max(dp[i][j][k],max(dp[i-1][j][k-1],dp[i-1][j-1][k-1])+a[i][j]*3);
				}
	int ans=-5e10;
	K=min(K,n);
	for(int i=1;i<=n;i++)
		for(int k=0;k<=K;k++)
		ans=max(ans,dp[n][i][K]);
	cout<<ans;
	return 0; 
 } 
2024/8/24 08:01
加载中...