zoukankan      html  css  js  c++  java
  • AW165 小猫爬山

    题目地址


    注意点:

    • 搜索的基本思路是有效剪枝.
    • 先排序一次再查找可以大大优化搜索效率.
    • (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
    ",ans);
    	return 0;
    }
    

      

  • 相关阅读:
    测试种类
    Android ADB使用之详细篇
    Maven 生命周期
    在Eclipse中新建Maven项目
    Maven搭建环境(Linux& Windows)
    一个简单的JUnit项目
    Assertions
    Aggregating tests in suites
    Test execution order
    c#一个分页控件的例子
  • 原文地址:https://www.cnblogs.com/zbsy-wwx/p/11686443.html
Copyright © 2011-2022 走看看