82分求调,#11#12WA(递归搜索)
查看原帖
82分求调,#11#12WA(递归搜索)
1115386
dingxiangqian楼主2024/9/10 21:53

#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;
}

怎么和p10483一样???

2024/9/10 21:53
加载中...