不懂就问,为什么题解里说递归容易TLE啊
查看原帖
不懂就问,为什么题解里说递归容易TLE啊
752711
hateful_bug楼主2024/5/27 17:48

我最慢一个点跑了40ms

#include<bits/stdc++.h>
using namespace std;
int m,n;
int w[355],l[355],b[6],jyh[42][42][42][42];
void in()
{
	int x;
	scanf("%d%d",&m,&n);
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&l[i]);
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&x);
		++b[x];
	}
}
int dp(int m,int a1,int b1,int c1,int d1)
{
	if(jyh[a1][b1][c1][d1]!=0)
	return jyh[a1][b1][c1][d1];
	int a=0,b=0,c=0,d=0;
	if(a1>0)
	a=dp(m-1,a1-1,b1,c1,d1);
	if(b1>0)
	b=dp(m-2,a1,b1-1,c1,d1);
	if(c1>0)
	c=dp(m-3,a1,b1,c1-1,d1);
	if(d1>0)
	d=dp(m-4,a1,b1,c1,d1-1);
	return jyh[a1][b1][c1][d1]=max(a,max(b,max(c,d)))+l[m];
}
int main()
{
	in();
	printf("%d",dp(m,b[1],b[2],b[3],b[4]));
	return 0;
} 
2024/5/27 17:48
加载中...