40pts求调QAQ
查看原帖
40pts求调QAQ
648756
Shadow_Lord楼主2023/3/22 18:08
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int INF=1e18;
inline int read()
{
	int s=0,w=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
	return s*w;
}
int n,a[101][101],k,f[5051][101][2],ans=-INF;
main()
{
	n=read();k=read();
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=i;j++)a[i][j]=read();
	}
	f[0][1][1]=a[1][1];f[1][1][1]=a[1][1]*3;
	if(n==1)
	{
		ans=max(ans,f[0][1][1]);
		ans=max(ans,f[1][1][1]);
		cout<<ans;
		return 0; 
	}
	if(k>n)k=n;
	for(int i=2;i<=n;i++)
	{
		int u=i%2;
		for(int j=1;j<=i;j++)
		{
			for(int z=1;z<=k;z++)
			{
				f[z][j][u]=-INF;
				if(j==1)
				{
					f[z][j][u]=max(f[z][j][u^1]+a[i][j],f[z-1][j][u^1]+a[i][j]*3);
					if(i==n)
					{
						ans=max(ans,f[z][j][u]);
					}
					continue;
				}
				if(j==i)
				{
					f[z][j][u]=max(f[z][j-1][u^1]+a[i][j],f[z-1][j-1][u^1]+a[i][j]*3);
					if(i==n)
					{
						ans=max(ans,f[z][j][u]);
					}
					continue;
				}
				if(j-1>=1)f[z][j][u]=max(f[z][j][u],f[z-1][j-1][u^1]+a[i][j]*3);
				if(j<i)f[z][j][u]=max(f[z][j][u],f[z-1][j][u^1]+a[i][j]*3);
				if(j-1>=1)f[z][j][u]=max(f[z][j][u],f[z][j-1][u^1]+a[i][j]);
				if(j<i)f[z][j][u]=max(f[z][j][u],f[z][j][u^1]+a[i][j]);
				if(i==n)
				{
					ans=max(ans,f[z][j][u]);
				}
			}
		}
	}
	cout<<ans;
	return 0;
}
2023/3/22 18:08
加载中...