奇怪记忆化搜索代码求调QwQ
查看原帖
奇怪记忆化搜索代码求调QwQ
649095
幻想繁星NM 猫猫可爱楼主2023/3/23 10:12
#include<bits/stdc++.h>
using namespace std;
inline long long read();
int n,k;
int a[102][102];
long long dis[102][102][5000];
long long dfs(int i,int j,int kn,long long sum)
{
	if(dis[i][j][kn])
		return dis[i][j][kn]+sum;
	if(j>i)
		return 0;
	if(i==n)
		return sum;
	if(kn<k)
	{
		dis[i+1][j][kn+1]=dfs(i+1,j,kn+1,sum+a[i+1][j]*3)-sum;
		dis[i+1][j+1][kn+1]=dfs(i+1,j+1,kn+1,sum+a[i+1][j+1]*3)-sum;
		dis[i+1][j][kn]=dfs(i+1,j,kn,sum+a[i+1][j])-sum;
		dis[i+1][j+1][kn]=dfs(i+1,j+1,kn,sum+a[i+1][j+1])-sum;
		return max(max(dis[i+1][j][kn],dis[i+1][j][kn+1]),max(dis[i+1][j+1][kn],dis[i+1][j+1][kn+1]))+sum;
	}
	dis[i+1][j][kn]=dfs(i+1,j,kn,sum+a[i+1][j])-sum;
	dis[i+1][j+1][kn]=dfs(i+1,j+1,kn,sum+a[i+1][j+1])-sum;
	return max(dis[i+1][j][kn],dis[i+1][j+1][kn])+sum;
}
int main()
{
	n=read();
	k=read();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=i;j++)
			a[i][j]=read();
	cout<<max(dfs(1,1,1,a[1][1]*3),dfs(1,1,0,a[1][1]));
	return 0;
}
2023/3/23 10:12
加载中...