50pts 求调
查看原帖
50pts 求调
513907
wangjunjie2020楼主2023/8/5 16:19
#include<bits/stdc++.h>
using namespace std;
int n,k,a[105][105];
long long rp[105][105][105];
long long dfs(int x,int y,int k1)
{
	if(x==n+1)return 0;
	if(rp[x][y][k1]!=rp[0][0][0])return rp[x][y][k1];
	for(int i=0;i<=1;i++)
	{
		rp[x][y][k1]=max(rp[x][y][k1],dfs(x+1,y+i,k1)+a[x][y]);
		if(k1>0)
			rp[x][y][k1]=max(rp[x][y][k1],dfs(x+1,y+i,k1-1)+a[x][y]*3);
	}
	return rp[x][y][k1];
}
int main()
{
	memset(rp,-0x7f,sizeof(rp));
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=i;j++)
			scanf("%d",&a[i][j]);
	dfs(1,1,min(k,n));
	printf("%lld",rp[1][1][min(k,n)]);
	return 0;
}
2023/8/5 16:19
加载中...