湛江市品牌网站建设服务如何?需要专业的网站建设吗?
摘要:湛江市品牌网站建设怎么样,需要网站建设,在百度做网站需要什么资料,做招聘网站需要资质吗算法提高课笔记目录 小猫爬山题意思路代码 数独题意思路代码 木棒题意思路代码 生日蛋糕题意思路代码 剪枝是什么意思呢?
湛江市品牌网站建设怎么样,需要网站建设,在百度做网站需要什么资料,做招聘网站需要资质吗算法提高课笔记 目录 小猫爬山题意思路代码 数独题意思路代码 木棒题意思路代码 生日蛋糕题意思路代码 剪枝是什么意思呢#xff1f; 我们知道#xff0c;不管是内部搜索还是外部搜索#xff0c;都可以形成一棵搜索树#xff0c;如果将搜索树全部遍历一遍#xff0c;效率…算法提高课笔记 目录 小猫爬山题意思路代码 数独题意思路代码 木棒题意思路代码 生日蛋糕题意思路代码 剪枝是什么意思呢 我们知道不管是内部搜索还是外部搜索都可以形成一棵搜索树如果将搜索树全部遍历一遍效率会很低但如果我们能在搜索的过程中提前预知判断某一些不可能是正确答案的情况就可以不用遍历其下的子树从而提高我们的算法效率
我们可以从以下几个角度考虑剪枝
优化搜索顺序 优先选择分支较少的结点排除等效冗余 尽量保证不搜索重复的状态就是在不考虑顺序时采用组合的方式搜索可行性剪枝 不合法提前退出最优性剪枝 如果当前答案无论如何都比目前的最优解要差那就可以不要往下搜了记忆化搜索DP
接下来将通过例题来讲解
小猫爬山
原题链接
翰翰和达达饲养了 N 只小猫这天小猫们要去爬山。
经历了千辛万苦小猫们终于爬上了山顶但是疲倦的它们再也不想徒步走下山了呜咕_。
翰翰和达达只好花钱让它们坐索道下山。
索道上的缆车最大承重量为 W而 N 只小猫的重量分别是 C1、C2……CN。
当然每辆缆车上的小猫的重量之和不能超过 W。
每租用一辆缆车翰翰和达达就要付 1 美元所以他们想知道最少需要付多少美元才能把这 N 只小猫都运送下山
输入格式
第 1 行包含两个用空格隔开的整数N 和 W。
第 2…N1 行每行一个整数其中第 i1 行的整数表示第 i 只小猫的重量 Ci。
输出格式
输出一个整数表示最少需要多少美元也就是最少需要多少辆缆车。
数据范围
1 ≤ N ≤ 18, 1 ≤ Ci ≤ W ≤ 108
输入样例
5 1996
1
2
1994
12
29输出样例
2题意
给出小猫重量、缆车承重问最少要多少缆车能把所有小猫运走
思路
枚举每只小猫有两种状态
放到当前这辆车上新开一辆车
优化
优化搜索顺序比较一只比较轻的猫和另一只比较重的猫显然是比较重的猫带来的分支数量较少因为如果猫非常重可以直接把车占满但是猫很轻的话我们就要考虑还要加什么别的猫因此将所有猫按从大到小排序优先放重猫可行性剪枝当发现目前小猫的重量已经超过缆车承重就不要再往下搜了最优性剪枝当发现目前缆车数量已经大于等于当前计算出的缆车最少数量就不要再搜索了
代码
#include bits/stdc.husing namespace std;const int N 20;int n, m;
int w[N];
int sum[N];
int ans N; // 最坏的情况:每只小猫占一辆车void dfs(int u, int k) // u:当前在搜第几只猫 k:当前在搜第几辆车
{// 最优性剪枝if (k ans) return;if (u n){ans k;return;}for (int i 0; i k; i ) // 遍历每一辆车// 可行性剪枝if (sum[i] w[u] m) // 称重符合条件{sum[i] w[u];dfs(u 1, k);sum[i] - w[u]; // 恢复现场}// 新开一辆车sum[k] w[u];dfs(u 1, k 1);sum[k] 0; // 恢复现场
}int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin n m;for (int i 0; i n; i ) cin w[i];// 优化搜索顺序sort(w, w n);reverse(w, w n);dfs(0, 0);cout ans \n;
}数独
原题链接
数独是一种传统益智游戏你需要把一个 9×9 的数独补充完整使得数独中每行、每列、每个 3×3 的九宫格内数字 1∼9 均恰好出现一次。
请编写一个程序填写数独。
输入格式
输入包含多组测试用例。
每个测试用例占一行包含 81 个字符代表数独的 81 个格内数据顺序总体由上到下同行由左到右。
每个字符都是一个数字1−9或一个 .表示尚未填充。
您可以假设输入中的每个谜题都只有一个解决方案。
文件结尾处为包含单词 end 的单行表示输入结束。
输出格式
每个测试用例输出一行数据代表填充完全后的数独。
