这题可以记忆化搜索吗?如果可以,如何记忆化?
查看原帖
这题可以记忆化搜索吗?如果可以,如何记忆化?
250699
mot1ve楼主2020/9/15 15:10

不要跟我说正解是dp,我在练搜索谢谢。233

30分,TLE7个点

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int ans=INF,n,m;
int s[3000];
void dfs(int step,int sum,int res)//暴搜,枚举每一趟带几头牛,step就是需要累加的返回次数
{
	if(res==0)
	{
		ans=min(ans,sum+m*(step*2-1));
		return ;
	}
	for(int i=1;i<=res;i++)//每次可带的牛为1-res(剩下的个数) 
	{
		dfs(step+1,sum+s[i],res-i);
	}
} 
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		s[i]=s[i-1]+x;//用前缀和预处理出带i头牛需要的时间 
	}
	dfs(0,0,n);
	cout<<ans;
	return 0;
}
2020/9/15 15:10
加载中...