
OJ
h_lizeming
这个作者很懒,什么都没留下…
展开
-
中国象棋中的跳马问题
题目描述现在棋盘的大小不一定,由p,q给出,并且在棋盘中将出现障碍物(限制马的行动,与象棋走法相同)输入第一行输入n表示有n组测试数据。每组测试数据第一行输入2个整数p,q,表示棋盘的大小(1每组测试数据第二行输入4个整数,表示马的起点位置与终点位置。(位置的取值范围同p,q)第三行输入m表示图中有多少障碍。接着跟着m行,表示障碍的坐标。原创 2017-07-16 10:28:13 · 1631 阅读 · 0 评论 -
bellman ford算法
//bellman ford算法//今天我们来说说最小路径得最后一个算法也是一个重要得算法了//当权值为负数得时候DIJKSTRA用不是用不上得//bellman ford算法可以计算权值为负数的最小路径 但是也是不能计算有权值为负数的环//现在这里普及一个思路 环一共有三种 第一种是零环 另一个是正环 再一个是负环//在最小路径上零环和正环都是可以忽略的 但是如果是负环的话原创 2017-07-27 20:54:47 · 899 阅读 · 0 评论 -
SPFA 算法
//SPFA 算法 今天再偶然的情况下发现了另一种最小路径的方法 正常来说 求最小路径只有两种方法//gijkstra方法挺好的就是不能处理权值为负的情况 而Ford算法又比较难实现 复杂度高//首先谈谈我对这个算法的理解吧。这个算法可以处理权值为负数的情况//但是却没有办法有权值为负的环 这个可以在后面解释 这个和他本身算法有关 //首先用3个一维数组 一个一维数组是用来记录该原创 2017-07-27 16:18:18 · 414 阅读 · 0 评论 -
floyd算法
//刚刚又看了一个算法叫floyd算法 就是在平常的情况下我们想得到任意两个点之间的的最小路程的值//一般情况下可能调用n次dijkstra算法 或者 是FORD算法 其实使用一次flord算法就可以了 但是注意初始化的问题 还有把代码背下来就可以了 //这个记得真的有点麻烦 for(int k=0;k for(int i=0;i for(int j=0;j原创 2017-07-27 16:49:32 · 382 阅读 · 0 评论 -
最长上升子序列(Longest Increasing Subsequence,LIS)
最长上升子序列(Longest Increasing Subsequence,LIS)简单的动态规划思路是对于每一个数字都是一个状态 然后处理每一个状态的时候 要遍历前面的状态满足d(i)=max{0,d(i)|j因为每一个都要遍历前面的状态 所以时间复杂度为n^2现在要学习一种时间复杂度为nlongn的算法其实这个优化方法使用了二分查找的方法 使用一个数组 坐标是从1原创 2017-08-04 10:07:38 · 324 阅读 · 0 评论 -
个人对背包问题的二进制优化问题的理解
完全背包问题是指有N种物品和一个容量为V的背包,每一种物品都是有无限的个数。也就是从每种物品角度分析,与其相关的策略不是选不选的问题了 已经转换为选多少个的问题了 其实说到这里你难道不觉得有点像DAG图的银币问题吗 只是那里的权值是1 这里的权值是W (其实我一开始在想一个问题 DAG图不是确定起点以及终点的求最小或者最长路径的嘛 这里只是确定了起点 而且终点只是一个范围值 因为有可能原创 2017-08-03 15:15:04 · 937 阅读 · 0 评论 -
01背包问题
首先我们来回顾一下DAG的有向无环图硬币问题就是确定起点还有终点的DAG 最大 问题(其实有最小问题的 因为有起点和终点)题目意思就是在面值确定的情况下,有N种无数的硬币 问你最大 最少使用多少硬币现在说一下01背包问题吧 就是说在不超过体积为C的情况下 有N种无数个背包 每一种背包都是有自己的体积(这里就是相当于硬币面值),然后有自己的重量问你最大能背多少重量这里就是有确定的原创 2017-08-02 15:06:24 · 280 阅读 · 0 评论 -
Unidirectional TSP
给一个m行n列(m≤10,n≤100)的整数矩阵,从第一列任何一个位置出发每次往右、右上或右下走一格,最终到达最后一列。要求经过的整数之和最小。整个矩阵是环形的,即第一行的上一行是最后一行,最后一行的下一行是第一行。输出路径上每列的行号。多解时输出字典序最小的。图9-5中是两个矩阵和对应的最优路线(唯一的区别是最后一行)。题解这道题目可以利用动态规划来做 把每一列作为一个原创 2017-08-02 10:37:37 · 459 阅读 · 0 评论 -
挑战ACM迷宫
如下图所示的是一个由程序设计题目组成的ACM迷宫。迷宫的左上角是入口,右下角是出口。迷宫中每一个格子都有一个程序设计题目,挑战者要AC该题目后才能通过,大于0的数字表示AC该题目所需的最短时间。数字如果是0表示是陷阱,进去了就出不来。现在的问题是:求挑战者从入口到出口所需的最短时间。输入有多组测试实例。对于每组测试实例,先输入一个数字n(1输出原创 2017-07-18 09:21:21 · 480 阅读 · 0 评论 -
DAG是有向无环图
DAG是有向无环图 有向无环图的动态规划是学习动态规划的基础 有很多问题都可以转换为DAG上的最长路 最短路或者路径计数问题DAG有向无环图貌似主要分为两个类型吧 第一个是嵌套矩形问题 第二个是硬币问题这里为什么说嵌套矩形问题是DAG最长路径问题 首先题目的意思是 有n个矩形,每个矩形可以用两个整数a、b描述,表示它的长和宽, 矩形(a,b)可以嵌套在原创 2017-08-01 11:22:53 · 885 阅读 · 0 评论 -
八数码
#include#include#includeusing namespace std;typedef int State[9];const int MAXSTATE = 1000000;State st[MAXSTATE], goal;int dist[MAXSTATE];set vis;void init_lookup_table() { vis.clear原创 2017-07-19 14:47:37 · 1427 阅读 · 5 评论 -
逃离迷宫
Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,gloria不能走到迷宫外面去。令人头痛的是,gloria是个没什么方向感的人,因此,她在行走过程原创 2017-07-19 14:09:38 · 438 阅读 · 0 评论 -
问题 D: 神奇密码锁
今天小编又来跟新了 没办法A题目速度不高啊 本人还在处于训练状态请多多包涵最近在训练DFS以及BFS 今天我来说说神奇密码锁问题 在做这个题目的过程中有思路 然后想上网找找 发现没有博客写关于这个问题 所以我想讲讲我的解题思路题目描述 小明忘记了旅行箱上的密码,现在他想自己暴力弄出密码来,但他又想知道最从一个数字到另一个数字最少需要多少步,现在请你帮忙。另外,小明的密原创 2017-07-17 14:34:26 · 2050 阅读 · 0 评论 -
Balloons
有M(M=100)个气球,有N(N=10)个人可以吹气球,但是只有一个工具,对于每个人i,有两个参数: Ai(Ai=10)⇒一分钟可以吹Ai个气球,Bi(Bi=4)⇒吹完一分钟后需要休息Bi分钟才能继续吹。 问吹完M个气球最少要多少分钟。解题思路:观察发现Bi=4,那么显然我们可以开一个F[sum][a1][a2][a3][a4]表示还有sum个气球,前一分钟是a1在吹,前转载 2017-07-21 17:45:49 · 417 阅读 · 0 评论 -
问题 G: 水果消除
“水果消除”是一款手机游戏,相信大家都玩过或玩过类似的游戏。下面是“水果消除”游戏的一种初始状态。消除的基本规则:如果有2个或2个以上的相同水果连在一起,则可以点选并消除。请问在某一种状态下,有几种可以点选并消除的选择方案。例如,对于上图所示的初始状态,将有6种点选并消除的选择方案。这6种方案依次如下图所示。原创 2017-07-17 15:52:39 · 404 阅读 · 0 评论 -
Additive equations
Problem Description We all understand that an integer set is a collection of distinct integers. Now the question is: given an integer set, can you find all its addtive equations? To explain wha原创 2017-07-20 12:53:34 · 373 阅读 · 0 评论 -
DFS_棋盘问题
[提交][状态][讨论版]题目描述在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。输入输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以原创 2017-07-16 16:39:47 · 514 阅读 · 2 评论 -
手势密码
很多手机或平板电脑软件都可以设置手势密码,在设置了手势密码后,进入程序时,首先要输入手势密码。手势密码最少选择4个点,最多选择9个点,理论上的密码组合总共有985824种,扣除掉其中不可能完成的组合(如一些点不允许绕过),最终的可能性是389112种。可见,手势密码加强了软件访问的安全性。下面介绍一下手势密码的规则(如果你熟悉手势密码的规则,可略过):1) 从某一个点出发,不间断地画原创 2017-07-16 14:47:19 · 3841 阅读 · 0 评论 -
Prim
#include <iostream> #include <string.h> using namespace std; const int MAXN = 2010; const int INF = 1 << 30; int map[MAXN][MAXN]; int N, M; int lowcost[MAXN]; v...转载 2018-05-29 19:06:41 · 993 阅读 · 0 评论