zoukankan      html  css  js  c++  java
  • 【tyvj】【搜索】小猫爬山

    背景

    Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。

    描述

    Freda和rainbow只好花钱让它们坐索道下山。索道上的缆车最大承重量为W,而N只小猫的重量分别是C1、C2……CN。当然,每辆缆车上的小猫的重量之和不能超过W。每租用一辆缆车,Freda和rainbow就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运送下山?

    输入格式

    第一行包含两个用空格隔开的整数,N和W。
    接下来N行每行一个整数,其中第i+1行的整数表示第i只小猫的重量Ci。

    输出格式

    输出一个整数,最少需要多少美元,也就是最少需要多少辆缆车。

    测试样例1

    输入

    5 1996
    1
    2
    1994
    12
    29

    输出

    2

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #define INF 0xffffffff
    #define REP(a,b) for(int i=a;i<=b;i++)
    using namespace std;
    
    int n,W,c[20],l,r,w[20],mid,pre=INF;
    bool flag=false;
    
    void check(int pos,int lim){//搜索到了第pos只小猫,缆车重量不超过lim 
    	if(flag) return;
    	if(pos>n) {
    		flag=true;
    		return;
    	}
    	REP(1,mid){
    		if(w[i]+c[pos]>lim) ;
    		else {
    			w[i]+=c[pos];
    			check(pos+1,lim);
    			w[i]-=c[pos];
    		}
    	}
    }
    
    int main(){
    	scanf("%d%d",&n,&W);
    	REP(1,n) scanf("%d",&c[i]);
    	for(mid=1;mid<=n;mid++) {
    		check(1,W);
    		if(flag) break;
    		memset(w,0,sizeof(w));
    	}
    	printf("%d",mid);
    	return 0;
    }


  • 相关阅读:
    matlab实现插值法sin函数
    matlab实现共轭梯度法、多元牛顿法、broyden方法
    matlab实现雅可比、高斯塞德尔、后项误差计算
    matlab实现高斯消去法、LU分解
    matlab实现不动点迭代、牛顿法、割线法
    matlab实现的嵌套乘法、高精度、二分法
    knn手写识别
    python笔记
    动态语言
    Spyder 快捷键
  • 原文地址:https://www.cnblogs.com/leotan0321/p/6081423.html
Copyright © 2011-2022 走看看