86分求调,#11#12WA(递归搜索)
查看原帖
86分求调,#11#12WA(递归搜索)
1115386
dingxiangqian楼主2024/9/10 21:49
#include<iostream>
#include<algorithm>
using namespace std;
long long n,w,minn=1e9;
long long c[50],vis[50],sum[50];
bool cmp(int a,int b)
{
    return a>b;
}
void dfs(int step,int num)
{
    if(num>=minn)return;//剪枝
    if(step==n+1)//递归边界
    {
        minn=num;
        return;
    }
    sum[num+1]+=c[step];//第step只猫单独
    dfs(step+1,num+1);
    
    for(int i=1;i<=num;i++)
    {
        if(sum[i]+c[step]<=w)//寻找可以放下第step只猫的车
        {
            sum[i]+=c[step];
            dfs(step+1,num);
            sum[i]-=c[step];//回溯消除影响 
        }
    }
}
int main(){
	cin>>n>>w;
	for(int i=1;i<=n;i++)
	{
	    cin>>c[i];
	}
	sort(c+1,c+n+1,cmp);//贪心
	dfs(1,0);
	cout<<minn;
	return 0;
}
2024/9/10 21:49
加载中...