分析
可以尝试把小猫分配到一辆已经租用的缆车上,或者用另外的一辆缆车;用深度优先搜索dfs(now,hire)来现在处理当前的这只猫,前面的now-1只是已经分配好了的,目前也已经租用了hire辆缆车。首先把当前的这只小猫分配到已经租用的缆车上,也就是已经租用缆车的循环,如果能分配那对应的缆车b数组来累加小猫的重量,然后递归后面一只小猫,直至所有小猫完成。如果前面已经租用的不装,考虑用新的缆车,就让当前的小猫到重新租用的新缆车上,相应的已经租用缆车数量+1,递归后面一只小猫。在当已经租用的缆车数量大于等于需要的数量时回溯,这题需要注意的是重量大的小猫难运输,把小猫的重量进行排序后,优先考虑重量大的小猫。
代码
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int N,W;//小猫数量,小猫的重量
int a[100],b[100],number;//小猫的重量数组,缆车所承受的重量数组,需要缆车的数量
void sort(int m){
//冒泡排序,对小猫的重量进行排序
int i,j;
double t;
for(i=