![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Wiki OI
文章平均质量分 82
Re_cover
这个作者很懒,什么都没留下…
展开
-
Wiki OI 1295 N皇后问题
题目链接:http://wikioi.com/problem/1295/算法与思路:一行一行放置,保证一行只有一个皇后,在行确定的基础上遍历列,直到找到可行解,然后退回x-1行状态,重复以上遍历,详见注释#include#includeint n; int sum = 0; int pos[15];//pos的下标为行号,值为列号 int judge(int x)原创 2013-06-03 20:28:00 · 1375 阅读 · 0 评论 -
Wiki OI 1220 数字三角形
题目链接:http://wikioi.com/problem/1220/算法与思路:棋盘型动态规划状态转移方程DP[i][j]= {DP[i][j] + max(DP[i + 1][j] , DP[i+1][j+1])}, 程序从最底层开始向上dp,最后输出DP[1][1]即可。#include int dp[101][101];int Max(int x, int y){原创 2013-05-16 21:43:34 · 1143 阅读 · 0 评论 -
Wiki OI 1282 约瑟夫问题
题目链接:http://wikioi.com/problem/1282/算法与思路:线段树;这个题目如果使用链表模拟出圈,时间复杂度为O(m*n);题目的数据规模是3W,显然会超时(当然如果数据水就不好说了);使用线段树的话却可以达到O(nlogn);首先递归建树,模版就不解释了;然后求相对位置seq,表示出圈者是当前圈中剩余者的第seq位;然后根据相对位置寻找seq的实际编号原创 2013-07-27 10:23:44 · 1464 阅读 · 0 评论 -
Wiki OI 1082 线段树练习 3 (区间更新,区间求和)
题目链接:http://wikioi.com/problem/1082/算法与思路:线段树对于线段树的初学者,可以参考以下链接,里面有相关的习题和详解http://www.notonlysuccess.com/index.php/segment-tree-complete/题目意思很直白,区间更新区间求和,思路倒没什么多讲的,关键在理解代码。值得注意的一个地方是,与单点更新原创 2013-07-19 10:51:18 · 1518 阅读 · 0 评论 -
Wiki OI 1063 合并果子
题目链接:http://wikioi.com/problem/1063/算法与思路:二叉堆的应用,所谓二叉堆就是指任意父节点都不大于或不小于其子节点的完全二叉树,这题使用的是小顶堆(根节点是所有节点中的最小值)。欲求最小消耗,则需要每次取最小的两堆果子合并,并将合并后的元素加入集合中,按照这种规则合并直到只剩一堆。很朴素的想法就是将元素排序,取出合并后插入有序队列中,重复取直到结束原创 2013-07-17 22:11:04 · 1224 阅读 · 0 评论 -
Wiki OI 1026 逃跑的拉尔夫
其实算不得原创,改动了下方便阅读而已,搜索这块实在有待加强;附上原文链接http://blog.csdn.net/u010126535/article/details/8939394;题目链接:http://wikioi.com/problem/1026/算法与思路:深搜按照给定的转向信息的顺序,从起点开始搜索,每个方向都要走到无法继续前进的状态,在每个状态又搜索下一个原创 2013-06-05 10:47:40 · 2784 阅读 · 0 评论 -
Wiki OI 1099 字串变换
题目链接:http://wikioi.com/problem/1099/算法与思路:双向广搜所谓双向搜索指的是搜索沿两个方向同时进行:正向搜索:从初始结点向目标结点方向搜索;逆向搜索:从目标结点向初始结点方向搜索;当两个方向的搜索生成同一子结点时终止此搜索过程。详见注释。#include#includestruct node{ char s[30];原创 2013-06-04 20:30:45 · 2191 阅读 · 0 评论 -
Wiki OI 1014 装箱问题
题目链接:http://wikioi.com/problem/1014/算法与思路:01背包转移方程为dp[i][j]=max{dp[i-1][j],dp[i-1][j-cost[i]]+w[i]}表示考虑第i件物品,容量为j时,有两种策略,第一种是不选该物品,第二种为选择该物品,在这两种策略中选择一个最优策略#include#includeint v, n;int dp[2原创 2013-05-26 22:31:17 · 1799 阅读 · 0 评论 -
Wiki OI 1004 四子连棋
题目链接:http://wikioi.com/problem/1004/算法与思路:广搜+Hash详见注释。#include#include#include#includeusing namespace std;const int dx[]={1, -1, 0, 0}; //初始化可移动的方向 const int dy[]={0, 0,原创 2013-06-05 21:38:15 · 2261 阅读 · 0 评论 -
Wiki OI 1080 线段树练习
题目链接:http://wikioi.com/problem/1080/算法与思路:树状数组,虽然这题题目是线段树练习,但是明显有单点更新,区间求和的特征,所以树状数组也能做,至于思路就不赘述了,不懂树状数组可以看我前面几篇相关的题解。#include#includeint n, m;int a[100010];int lowbit(int x){ return x & (原创 2013-07-11 20:03:28 · 1815 阅读 · 0 评论 -
Wiki OI 1163 访问艺术馆
题目链接:http://wikioi.com/problem/1163/算法与思路:树形dp,dfs;将博物馆的结构抽象成一棵二叉树,每条边都有对应的权值(走过这条边花费的时间),只在叶子节点有藏画,要求你在有限的时间内偷到尽可能多的藏画。点的信息按照深度优先顺序给出(前序遍历),建立一颗二叉树;然后从根节点开始深搜,每走过一条走廊到达下一个点,剩余的时间remain要减去原创 2013-07-20 08:55:50 · 1488 阅读 · 0 评论 -
Wiki OI 1039 数的划分
题目链接:http://wikioi.com/problem/1039/算法与思路:划分型dp,递推;将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的。1,1,5; 1,5,1; 5,1,1;因此将n划分份的一种方法唯一的表示为n1+n2+……nk,其中n1这样可以形象地把n的k份划分看作是把n块积木堆成原创 2013-07-19 17:18:06 · 1569 阅读 · 0 评论 -
Wiki OI 1077 多源最短路
题目链接:http://wikioi.com/problem/1077/算法与思路:全裸floyd。#include#include#includeusing namespace std;int main(){ int n, t, a[105][105]; int x, y; memset(a, 0, sizeof(a)); scanf("%d", &n); for原创 2013-05-29 21:13:16 · 1500 阅读 · 0 评论 -
Wiki OI 1048 石子归并
题目链接:http://wikioi.com/problem/1048/算法与思路:尽管是比较简单的dp,推出动态转移方程还得卡实现,毕竟是菜鸟啊。dp[i][j] = min(dp[i][k] + dp[k + 1][j] + s[j] - s[i - 1]) k属于[i, j];dp的过程中边界很重要,在输入阶段维护一个sum[i]数组表示前i项的石子原创 2013-05-16 18:49:57 · 1834 阅读 · 0 评论 -
大数的四则运算
题目链接:http://wikioi.com/problem/3115/ http://wikioi.com/problem/3116/ http://wikioi.com/problem/3117/ http://wikioi.com/problem/3118/算法与思路:大数的加,减,乘算法比较简原创 2013-07-26 19:42:43 · 1523 阅读 · 0 评论 -
Wiki OI 1245 最小的N个和
题目链接:http://wikioi.com/problem/1245/算法与思路:K路归并 + 堆(优先队列),K路归并具体请参考刘汝佳《算法竞赛入门经典训练指南》P189;题目要求从两个长度为n的数列中各取出一数相加,可得到n*n个和,输出这些和升序的前n项;由于数据太大,不能通过先求和再排序的方式来求解,这个时候就要用到堆了;首先将a,b两数组排序,然后将a[i] + b[1原创 2013-07-25 21:46:20 · 1742 阅读 · 0 评论 -
Wiki OI 1001 舒适的路线
题目链接:http://wikioi.com/problem/1001/算法与思路:并查集,首先枚举速度最大的那条边,然后把速度大于这条边的边都删掉,接下来的任务就是在残图中寻找一条路,路上的最小的那条边要尽量大。这个地方用并查集实现,对于剩下的边由大到小排序,然后逐个往集合里面加,直到某次加入操作后起点和终点被加到了同一个集合,这时停止操作,最后加的那条边就是一条所求的最原创 2013-07-17 22:21:57 · 2430 阅读 · 1 评论 -
Wiki OI 1044 拦截导弹
题目链接:http://wikioi.com/problem/1044/算法与思路:依次遍历整个序列,每一次求出从第一个数到当前这个数的最长上升子序列,直至遍历到最后一个数字为止,然后再取dp数组里最大的那个即为整个序列的最长上升子序列。我们用dp[i]来存放序列1-i的最长上升子序列的长度,那么dp[i]=max(dp[j])+1,(j∈[1, i-1]); 显然dp[1]=原创 2013-05-14 19:58:58 · 2830 阅读 · 2 评论 -
Wiki OI 1174 靶形数独
题目链接:http://wikioi.com/problem/1174/算法与思路:状态压缩 + 启发式搜索想要看懂这篇题解需要有一定位运算的基础,初学者可以参考以下链接http://www.matrix67.com/blog/archives/263所谓启发式搜索,就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量原创 2013-07-20 16:05:50 · 1609 阅读 · 0 评论 -
Wiki OI 1225 八数码难题
题目链接:http://wikioi.com/problem/1225/算法与思路:康托展开(hash)+ bfs;这个题目的的搜索部分对于很多同学来说并不难,关键在于棋盘状态的储存;如果直接使用0~8组成的9位数作为数组下标,要开到8亿显然不现实,这个时候就要用到康托展开了;初次接触的同学请戳链接 康托展开-维基百科,上面讲的很详细。然后就是相对简单的bfs了,详见注释。原创 2013-08-07 22:06:23 · 1471 阅读 · 0 评论