字串变换(双向BFS)
思路:最小步数模型用BFS去写,但是子串变换的可能是k种那么10步,就是的空间k^10会爆内存,那么用双向广搜优化,A,B同时变化,我们在同一层看有没有A,B可以相互到达的点,如果有那么就是A的距离+B的距离+1,没有就加入搜索,直到这一层搜完。保持两队列大小差不多,当A的小了就去搜A反之//#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define .
加成序列(迭代加深)
思路:满足题设的4个条件,第一个数一定是1,最后的数一定是n,数列单调递增,后面的数是由前面某2个数相加得来的。其中一些条件可以作为可行性剪枝,搜索时,我们去从小到大逐层搜m,因为条件4的的存在,我们会发现如1 2 3 5这种答案和1 2 4 5都是可行的,5可由2+3或者1+4得来那么我们就需要标记一下防止重复搜索。#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long.
回转游戏(IDA*)
思路:求最小的操作数,我们发现每次操作都有4种选择搜索树会很深,那么按操作数去搜索,用IDA*。从题中我们可以看出来这个输入和对应的下标是这样的,在就行8种操作时我们可以发现,他每次操作只会改变一个数的位置,我们先求一下中间8个数中哪个数出现最多为res,那么我们最少最要的操作数就是8-res,吧他作为估价函数。因为求最小的操作数,所以逆操作比如先A后F这样相当于没有变化,所以我们记录一下每种操作对应的逆操作。用下标对应就是0(A)的逆操作是5(F),为了方便移动数字,我们就先把8个操作对应的要修改的.
新年好(最短路+dfs)
思路:先用最短路预处理一下去亲戚家的最短距离,然后暴力搜索最短的拜访顺序。#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define SIS std::ios::sync_with_stdio(false)#define space putchar(' ')#define enter putchar('\n')#define lson root&.
通信线路(二分+最短路)
思路:从题意可以看出是求在一个从1——N的路径从第k+1条边的最大值最小,一看这最大值最小想到二分,我们发现答案可能是0(当1-n的路径经过的变数小于等于K时)也可能是没有解-1。所以我们二分时从0——1e6+1起,如果答案是1e6+1说明无解,然后我们不断二分出第K+1条边权x,然后在原图跑最短路,根据题意我们可以吧大于x的边权视为1,其他是0,这样我们就能知道当第k+1条边的权值为x时,有没有大于x的边数小于等于K,如果有说明我们的x还能往小继续二分。知道求出最优解。代码:#pragma GCC .
选择最佳线路(建立虚拟源点)
思路:问你从多个源点出发到终点的最短路线,那么我们建立一个虚拟源点和其他车站连起来权值为0,求从这个虚拟源点到终点的最短路(记得初始化tot)。代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define SIS std::ios::sync_with_stdio(false)#define space putchar(' ')#defin.
拯救大兵瑞恩(最短路,状态压缩)
思路:要找到到达N,M点的最短距离,当有门时需要用对应的钥匙开门,那么我们用dis[i][j]表示在编号i位置时此时持有钥匙的状态是j的最短距离。根据钥匙的编号id我们初始化Key的状态为Key=1<<id-1 ,我们可以发现当该位置有钥匙时,我们的状态就要发生改变state=state(原)|key然后看是否需要更新dis可得转移方程dis[i][state]=dis[i][state(原)|key],然后就是上下左右移动,在移动时我们需要判断有门的情况,当有门时,我们要判断在该位置上我们此.
观光(统计最短路,次短路条数)
思路:问最短路和次短路的条数和,并且次短路只比最短路多1,我们在dijkstra时进行统计和更新,用dis[i][0]表示到i点的最短距离用dis[i][1]表示到i点的次短距离,用cnt[i][0]表示到i的最短路径的条数,用cnt[i][1]表示到i的次短路径条数,当我们到 i 点最短路需要更新时,那么原来到 i 的最短路就会变成次短路,先更新一下次短路的距离,此时到 i 次短路的条数也是就变成了之前到 i 的最短路条数,然后我们再更新最短路的距离,最短路的次数也更新,当我们发现和最短路距离相同则我们.
牛的旅行(Floyd应用)
思路:根据题意我们要求牧场中最短路最长的是多少,首先如果只有一个牧场那么我们只需要跑一遍最短路然后,求各个点直接的最短距离最长是多少,我们用mxd[i]表示i点到其他点的最短距离最长是多少。如果需要连接牧场的话,我们就要枚举牧场之间的连接点,当dis[i][j]==inf时说明可以连边,此时我们找连边尽可能小的使得mxd[i]+dis[i][j]+mxd[j]尽可能小,最后看这2个哪个大就是要求的直径。#pragma GCC optimize(2)#include<bits/stdc++.h&g.
排序(floyd应用)
思路:只有一种关系,我们用这种关系做传递闭包,我们用floyd完成传递闭包运算。然后我们判断点之间的关系,dis[i][j]==1表示i<j关系存在,如果发生矛盾我们判断dis[i][i]是否为1,如果无法判断关系则说明dis[i][j]==dis[j][i]==0,否则关系判断无误。代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#defi.
android9.0源码来电屏蔽
首先,通过获取TelephonyManage,第二继承PhoneStateListener 监听电话状态的变化,执行判断哪个地方需要此功能加registerphone(this||***.this) public void registerphone(Context context) { mPhoneStateListener = new PhoneCallListener...
Android 10辅助服务无法自动跳转到其他界面解决办法
android 10发布时就对应用的Activity的权限进行了更严格的处理,具体看文档去。https://developer.android.google.cn/about/versions/10/privacy/changes#app-access-device-location解决办法:应用必须获取用户的应用悬浮窗权限,获取后就能自由的跳转了。<uses-permission ...
今日推荐
周排行