深搜题 dp应该也能做
题目:给你n只猫,每只猫有c的重量,现在再给你无限的缆车,每个缆车可以容下w的重量,并且每个缆车都要花费1元,问你需要多少钱
只需要用深搜把前u只小猫装进第k个缆车,如果有装不下的,就多买一个新缆车然后将旧缆车装不下的猫装进去继续深搜即可(详细见代码注释)
//不要抄袭
#include<bits/stdc++。h>
using namespace std;
const int N=1e300+7;
int a[N],sum[N];//sum:缆车
int n,ew;
int ans=114514191919; //定一个较大的数量防止取错
void dfs(int u,int k){ //u为第u只小猫 k为第k个缆车
if(k>=ans) return; //剪枝,当现有的需要的缆车数量大于或等于之前搜出的最小需要的缆车时,直接弹出
if(u==n+1){
ans=min(ans,k);
return;
}
//当把所有的猫装进去的时候,取需要缆车数量最小的值
for(int i=1;i<=k;i++){
if(sum[i]+a[u]<=w){
sum[i]+=a[u];
dfs(u+1,k);
sum[i]-=a[u];//查询当前的所有缆车是否装的下第u只猫,装的下就接着查询下一只猫,最后搜完减去这只猫为后面缆车让位
}
}
sum[k+1]=a[u];
dfs(u+1,k+1);
sum[k+1]=0; //增加一个新缆车,并将旧缆车装不下的猫装进去接着查询下一只猫,搜完再减去让位
}
int mxa1n(){
cin>>n>>w;
for(int i=1;i<=n;i++){
cin>>a[i];
}
dfs(1,0);
cout<<ans;
return 0;
}
后面没了