要求:
输入:两行,第一行是n和m,第二行是各西瓜的重量
输出:最多那份重量的最小值
#include <iostream>
using namespace std;
int n;
int m;
long long ans=INT_MAX;
long long a[10005];
long long b[505];
long long sum=0;
void dfs(int x,int y,long long b[],long long cur,long long sub)
{
if(x>n)
{
return;
}
if(y==m)
{
ans=min(ans,max(cur,sub));
return;
}
int temp=0;
for(int i=x;i<=n;i++)
{
temp+=a[i];
if(cur<temp)
{
cur=temp;
}
b[y]=temp;
dfs(i+1,y+1,b,cur,sub-temp);
b[y]=0;
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
dfs(1,1,b,0,sum);
cout<<ans;
return 0;
}
尝试用深搜解决,可实现基本功能但运行超时,求解🙏