
暴力求解
stloztoeplitz
严格标准不抱怨,宽松要求自提高
展开
-
1046. Plane Spotting
最开始想的是动态规划,后来发现每个状态不存在选择,那就直接暴力求解后进行筛选就行了。 考察排序,直接模拟,没什么难度。#include <iostream>#include <vector> #include <algorithm>#include <cstring>using namespace std;int const maxn = 310;int a[maxn],s[maxn];原创 2016-12-05 12:47:13 · 316 阅读 · 0 评论 -
分苹果
n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <=原创 2017-01-19 13:32:15 · 393 阅读 · 0 评论 -
马的周游问题
不剪枝的话就是最多来算是 860 8^{60}次计算,但是由于只需要找到一个合理的的解,我们可以优先的搜索分支最少的状态,这样就可以极大的减少计算量,大约每次的分支数比4还要小。 将可能的8中跳法,用编码的方式给出,极大地减少了代码量。 注意dfs的书写,最起初有个8个选择,当8个选择中有一个正确的时候,就可以结束判断了,当8个选择全部都错误的时候就可以结束判断了。 注意最终状态的判读,不然会原创 2016-11-20 10:40:46 · 531 阅读 · 0 评论 -
全排列拓扑排序
由于要解答用dfs写了一个输出一张有向图的所有拓扑排序的代码。 顺便再这里总结一下关于dfs写的技巧,关于dfs一定是要有循环的,只有这样才能够构成排列,而且分清楚当前步骤要做什么,在调用下层后要注意恢复状态。一般纯dfs的效率都不会高,这时候特别要注意减枝。#include <iostream>#include <cstring>#include <vector>#include <alg原创 2016-12-04 11:40:06 · 721 阅读 · 0 评论 -
无线广播(Broadcast)
描述 某广播公司要在一个地区架设无线广播发射装置。该地区共有n个小镇,每个小镇都要安装一台发射机并播放各自的节目。不过,该公司只获得了FM104.2和FM98.6两个波段的授权,而使用同一波段的发射机会互相干扰。已知每台发射机的信号覆盖范围是以它为圆心,20km为半径的圆形区域,因此,如果距离小于20km的两个小镇使用同样的波段,那么它们就会由于波段干扰而无法正常收听节目。现在给出这些距离小于20原创 2016-12-10 15:54:38 · 661 阅读 · 0 评论 -
红与黑
#include <iostream>#include <cstring>using namespace std;const int maxn = 25; int dr[]={0,0,1,-1};int dc[]={1,-1,0,0};char data[maxn][maxn]; int vis[maxn][maxn];int dfs(int lr,int lc,int r,int原创 2016-12-29 14:00:27 · 376 阅读 · 0 评论 -
1754. 逃离洞穴
基础bfs题目的变形,在结构体里设定答案,在状态更新后才进行判断。两个基础的bfs.#include <iostream>#include <cstring>#include <queue>using namespace std;int const maxn = 2000;int vis[maxn][maxn]; int rr,cc;char map[maxn][maxn];int e原创 2016-11-18 14:53:47 · 323 阅读 · 0 评论 -
1215. 脱离地牢
此题有个巨大的吐槽的地方就是最终状态的判定有两种情况,相遇或者到一个格子里,不要忘记当队列为空要判定状态为结束。还有可以用方向来代表数组的下标,是代码更具有可读性。#include <iostream>#include <cstring>#include <queue>using namespace std;int const maxn = 50;char map[maxn][maxn];原创 2016-11-19 20:06:27 · 464 阅读 · 0 评论 -
连通性问题
典型的查并集算法,适用于森林的连接#include <iostream>using namespace std;int const maxn = 100010;int father[maxn];int find(int x) { if (x!=father[x]) father[x] = find(father[x]); return father[x];}原创 2016-12-08 20:34:16 · 247 阅读 · 0 评论 -
走迷宫
记忆化搜索的效果呢?我估计效率不会高。#include <iostream>#include <cstring>#include <queue>using namespace std;int const maxn = 20;int vis[maxn][maxn];char data[maxn][maxn];int dr[]={1,-1,0,0};int dc[]={0,0,1,-1}原创 2016-12-31 21:36:13 · 290 阅读 · 0 评论 -
Super Snooker
#include <iostream>using namespace std;int main() { int t; cin>>t; int a,b,c,d; for (int i=1;i<=t;i++) { cin>>a>>b>>c>>d; int s=(c+d)*(d-c+1)/2; int len = d-c+1原创 2017-01-13 20:53:02 · 270 阅读 · 0 评论 -
Team Rankings
搜索#include <iostream>#include <cstring>using namespace std;char tmp[10];char data[110][10];int vis[10];int ans = 2<<10;int n;char hh[10];int findchar(char* s,char k) { for (int i=0;i<strle原创 2017-01-13 20:52:28 · 367 阅读 · 0 评论 -
数列还原
牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含两个整数 n 和 k(1 <= n <=原创 2017-01-19 13:41:11 · 418 阅读 · 0 评论