首页 > 其他 > 详细

AW165 小猫爬山

时间:2019-10-16 16:54:34      阅读:67      评论:0      收藏:0      [点我收藏+]

技术分享图片

题目地址


注意点:

  • 搜索的基本思路是有效剪枝.
  • 先排序一次再查找可以大大优化搜索效率.
  • (167ms -> 26ms)

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=1e2,INF=2e9;
int c[MAXN];//小猫重量 
int w;//每辆车的最大承重
int n;//猫数量 
int carWeight[MAXN];//每一辆车的当前载重量 
int carCnt=0;//已使用的车数量 
int ans=INF; //整体最优值 
int dfs(int nowCat,int usedCnt){//当前小猫 已使用缆车量 
	if(nowCat>n)return usedCnt;
	if(usedCnt>=ans)return INF;
	int minUse=INF;//当前最小花费 
	carCnt++;
	carWeight[carCnt]+=c[nowCat];
	minUse=min(dfs(nowCat+1,usedCnt+1),minUse);//这只猫用缆车
	carWeight[carCnt]-=c[nowCat];
	carCnt--;
	for(int i=1;i<=carCnt;i++){//这只猫不用缆车 
		if(carWeight[i]+c[nowCat]<=w){//能挤一挤
			carWeight[i]+=c[nowCat];
			minUse=min(minUse,dfs(nowCat+1,usedCnt));//挤一挤
			carWeight[i]-=c[nowCat];
		}
	}
	ans=min(ans,minUse);
	return minUse;
}
bool cmp(int a,int b){
	return a>b;
}
int main(){
	scanf("%d%d",&n,&w);
	for(int i=1;i<=n;i++){
		scanf("%d",&c[i]);//读入每个猫的数量 
	}
	sort(c+1,c+n+1,cmp);
	int ans=dfs(1,0);
	printf("%d\n",ans);
	return 0;
}

  

AW165 小猫爬山

原文:https://www.cnblogs.com/zbsy-wwx/p/11686443.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!