不要跟我说正解是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;
}