![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
ACM-Blog-WUCHAO
这个作者很懒,什么都没留下…
展开
-
ACM课程总结
ACM课程总结本学期所学的ACM已经算是告一段落了,总体来说,对它的感觉是有喜有悲,喜的是从这里学到了对待问题的思维方式,悲的是ACM的相关题目还是不算容易,一道简单题有可能还得花上一些时间方可AC,不过A过一道题后的喜悦是不言而喻的。废话不多说,下面来对本学期的ACM课程做个总结。Part 1 习得的知识一、 贪心算法 一)基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最原创 2016-07-08 12:05:58 · 438 阅读 · 0 评论 -
搜索—Problem_1016-Red and Black
搜索—Problem_1016-Red and Black 题意 简单概括,给一幅图,算出有从起点出发最多能走多少步。 解题思路 用DFS。从@开始所有向四个方向走,查看。的数量,当走到边界返回,碰到#返回。 感想 算是水题吧,其实DFS和BFS都可以。 AC代码#include <stdio.h>#include <string.h>int n,m,cnt;char map[3原创 2016-04-23 15:22:40 · 197 阅读 · 0 评论 -
搜索—Problem_1015-Knight Moves
搜索—Problem_1015-Knight Moves题意 国际象棋中Knight的移动问题。 /先简单介绍下knight:在国际象棋中Knight称“马”或“骑士”,Knight的走法和中国象棋中马相同,同样是走“日”字,或英文字母大写的“L”形:即先向左(或右)走1格,再向上(或下)走2格;或先向左(或右)走2格,再向上(或下)走1格。不同的是,囯际象棋的Knight没有“绊马脚”的限制原创 2016-04-23 14:19:10 · 227 阅读 · 0 评论 -
动态规划—Problem E
动态规划—Problem E 题意 有n种长方体,每种长方体都有无限多个,问用这些长方体最高能摆多高。要求是在下面的长方体的长要大于上面长方体的长,宽大于上面长方体的宽。 解题思路 读题发现,其实就是求最长的子序列问题,单调递减序列,但是复杂之处在于如何对长宽表示以及排序。在这里不妨采取让长和宽排序按递减的方式把问题转化为求最长单调递减序列。 感想 感觉还是有难度的,特别是在长和宽处理时原创 2016-05-07 22:39:24 · 541 阅读 · 0 评论 -
搜索—Problem_1020-Prime Ring Problem
搜索—Problem_1020-Prime Ring Problem题意 有N个连续的自然数围成一圈,要求重新组合它们的顺序使得任意相邻两个数的和为素数。输出符合要求的顺序。 解题思路 采用DFS。很笨的方法,对当前一个数,展开DFS,把每一种可能的方法都罗列出来,由于所规定数不超过20,所以把40以内的素数都写到数组里,让两个数的和去跟它们比较是否相等就能判断是不是素数了,符合条件的放入数原创 2016-04-22 17:19:49 · 204 阅读 · 0 评论 -
动态规划—Problem O
动态规划—Problem O 题意 将一个十进制数转换为二进制数。 解题思路 采取比较传统的方法,对输入的数除以2取余,存放到数组里,除到1时存入1结束。 感想 昨晚A的忘记写博客了,额~ AC代码#include<iostream>#include<cstring> using namespace std;int main(){ int n; int a[20原创 2016-05-07 18:03:54 · 253 阅读 · 0 评论 -
搜索—Problem_1012-Rescue
搜索—Problem_1012-Rescue题意 营救angle,她被困在监狱里,监狱地形看作是N*M的矩阵,其中有墙,路以及卫兵。她的朋友们要去救她,只要其中任何一位朋友找到她即可。在营救过程中如果遇到卫兵需要杀死他才能通过继续前进,这种情况会用2个单位的时间,遇到墙不能走,其余的情况可以走,每移动一次消耗一个单位时间。如能营救成功,求营救的最小时间。否则输出“Poor ANGEL has t原创 2016-04-22 16:14:58 · 251 阅读 · 0 评论 -
动态规划—Problem R
动态规划—Problem R 题意 题意:给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量。要求出重量最少能装满钱罐时的最大价值。 解题思路 完全背包问题。关于完全背包嘛,即在01背包的基础上,每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……等很多种。如果仍然按照解01背包时的思路,令f[i]原创 2016-05-30 21:58:02 · 499 阅读 · 0 评论 -
动态规划—Problem G
动态规划—Problem G 题意 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径上接。由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手原创 2016-05-30 21:41:21 · 274 阅读 · 0 评论 -
动态规划—Problem N
动态规划—Problem N 题意 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。 解题思路 递推。先分析下直线分割平面的情况,增加第n条直线的时候,跟之前的直线最多有n-1个交点,此时分出的部分多出了(n-1)+1;折线也是同理,f(1)=2,f(原创 2016-05-05 09:59:26 · 328 阅读 · 0 评论 -
动态规划—Problem K
动态规划—Problem K 题意 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。 解题思路 题目所述,但并未发现图,于是百度找到了原题与图(原图已附上)。分析后发现与前几个做的题目类似,思路同样也是递推,而且dp[1=1.dp[2]=2,同样的递推公式为:dp[i]=dp[i-1]+dp[i-2]。然后根据输入的a,b,相应输出dp原创 2016-05-04 16:41:39 · 203 阅读 · 0 评论 -
动态规划—Problem H
动态规划—Problem H 题意 穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关。要知道,不论何人,若在迷宫中被困1小时以上,则必死无疑!可怜的yifenfei为了去救MM,义无返顾地跳进了迷宫。让我们一起帮帮执着的他吧!命运大迷宫可以看成是一个两维的方格阵列,如下图所示:原创 2016-05-26 21:38:20 · 420 阅读 · 0 评论 -
动态规划—Problem L
动态规划—Problem L 题意 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,求出铺放方案的总数。 解题思路 递推,假设用dp[i]表示2*i的方格一共有组成的方法数,我们已知dp[1]=1,dp[2]=2。现在假设我们已经知道了dp[i-1]和dp[i-2],再求dp[i],不过是在2*(i-1)的格子后边加上一格2*1的方格罢了,骨牌在这一格上横着放,竖着放,如原创 2016-05-03 14:08:45 · 224 阅读 · 0 评论 -
搜索—Problem_1019-N皇后问题
搜索—Problem_1019-N皇后问题 题意 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上)。对于给定的N,求出有多少种合法的放置方法 解题思路 就是考虑皇后放置的位置,对于每一行,我们需要枚举每个可以放置皇后的位置, 而且需要判断当前位置(第i行)是否满足条件,即判断这个位置是否与放置好的前i-1原创 2016-04-18 21:35:50 · 278 阅读 · 0 评论 -
搜索总结
搜索总结搜索简介 搜索算法是利用计算机的高性能来有目的地穷举一个问题的部分或所有的可能情况,从而求出问题的解的一种方法。 相比于单纯的枚举算法有了一定的方向性和目标性。算法是在解的空间里,从一个状态转移(按照要求拓展)到其他状态,这样进行下去,将解的空间中的状态遍历,找到答案(目标的状态)。 搜索分类 在搜索这一部分主要讲的有入门的如二分、三分,BFS,DFS,还有一些结合其他的比较综原创 2016-04-23 18:36:17 · 186 阅读 · 0 评论 -
动态规划—Problem D
动态规划—Problem D 题意 有一组数,它们的共同特征是它们的因数只含2,3,5,7,有5842个数,要求输入一个数输出对于位置的数是多少。 解题思路 分析题意,要做的事就是求出所有这些符合条件的数,然后输出就不难了。若一个数是Humble数,则它的2、3、5、7倍仍然是Humble数。设dp[i]为第i个Humble数,则dp[t] = min(2*dp[num2], 3*dp[nu原创 2016-05-08 16:56:54 · 195 阅读 · 0 评论 -
图算法总结
图算法总结图 (Graph) 是一种复杂的非线性数据结构,由顶点集合及顶点间的关系(也称弧或边)集合组成。可以表示为: G=(V, {VR}) 其中 V 是顶点的有穷非空集合; VR 是顶点之间关系的有穷集合,也叫做弧或边集合。弧是顶点的有序对,边是顶点的无序对。 度:无向图中顶点 v 的度是和 v 相关联的边的数目,记为TD(v)。 入度:有向图中以顶点 v 为终点的弧数目称为 v 的入度原创 2016-07-08 12:00:22 · 626 阅读 · 0 评论 -
图算法—Problem M
图算法—Problem M 题意 有n个人坐在zjnu体育馆里面,然后给出m个他们之间的距离, A B X, 代表B的座位比A多X. 然后求出这m个关系之间有多少个错误,所谓错误就是当前这个关系与之前的有冲突。解题思路 (1)弄清题意,找出出现冲突的位置,判断冲突很简单: 就是当两个人在同一行坐同时, 他们到根节点的距离差值正好是他们之间的距离差值。如果和测试数据不同,此时就出现了冲突了。原创 2016-07-06 22:35:18 · 480 阅读 · 0 评论 -
图算法—Problem J
图算法—Problem J 题意 题目大意是给一个图。起点为1,终点为2;然后点a到点b是合法的判断是当b存在一个到终点的距离小于a到终点的最小距离。求从起点到终点的路径数。解题思路 我的做法是dijk +DFS。具体为: 1、以终点 2 为起点 dijkstra; 2、直接DFS记忆化搜索。 感想 已经做不动了······ AC代码#include<cstdio>原创 2016-07-06 12:36:27 · 278 阅读 · 0 评论 -
图算法—Problem H
图算法—Problem H题意 求一个图的最大连通子图,要求每个联通分量最多只有一个环,且所求的边的权值之和最大。 解题思路 每输入一条边,判断此边两端点是不是在同一颗树上,如果在同一颗树上,判断树是不是有环,如果有环,则不加入此边,如果没环,加入此边(合并); 如果两棵树都没有环,直接合并即可;如果只有一棵树有环,可以合并,并标记; 如果都有环,显然不能合并。 感想 最大连通子图问原创 2016-07-05 12:14:33 · 342 阅读 · 0 评论 -
图算法—Problem K
图算法—Problem K 题意 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可原创 2016-07-04 12:04:15 · 228 阅读 · 0 评论 -
图算法—Problem B
图算法—Problem B 题意 给你一些点的坐标,然后求连通这些点的最小线段的长度。 解题思路 最小生成树问题。需要对这n个点全部处理一下,求出每对点之间的长度,然后存入邻接矩阵。然后就可以了。本题主要用kruskal算法 和用并查集来判环。 感想 虽说是最小生成树入门题,但是也挺麻烦。 AC代码#include <iostream>#include <algorithm>#in原创 2016-06-17 11:09:57 · 242 阅读 · 0 评论 -
图算法—Problem I
图算法—Problem I 题意 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? 解题思路 本题是图的最短路径的一个应用,从题目中可以分析得出是求两点间的最短路径,所以我们可以选择Floyd算法。 感想 最短路之最短路···原创 2016-07-02 22:20:20 · 2376 阅读 · 0 评论 -
图算法—Problem F
图算法—Problem F题意 在相通n个岛屿的所有桥都坏了,要重修,重修每一个桥所用的时间不同,求重修使每个岛屿都间接或直接与其他岛屿相同时所用的的最短时间(只有修完一个桥后才可修下一个桥)。//简言之就是求最小生成树。 解题思路 该题图为稀疏图,还是最小生成树问题,用Kruskal算法解决。 假设WN=(V,{E})是一个含有n个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为原创 2016-07-01 12:05:38 · 236 阅读 · 0 评论 -
图算法—Problem A
图算法—Problem A 题意 题目大意就是输入一个N表示有n个村庄,然后输入n行n列,第i行j个元素表示i村庄离j村庄的路数多远(所以i行i列一般为零),然后输入q,表示q条路已修,然后输入q对数就可以了。(权值为零)。求使其n个村庄最小的连通值。 解题思路 最小生成树问题。看PPT上有Prim算法和Kruskal算法两种。这道题采用的是Prim算法。写的过程中,需要注意的一点就是可能会原创 2016-06-15 11:05:52 · 264 阅读 · 0 评论 -
图算法—Problem E
图算法—Problem E题意 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。 解题思路 不多说,还是最小生成树问题。用的Kruskal方法。 感想 最近忙着复习,哎,事情好多,原创 2016-06-30 12:44:51 · 204 阅读 · 0 评论 -
图算法—Problem C
Problem C问题描述 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? 解题思路 典型的并查集问题。相互连接的城市构成一个集合,只需要判断集合个数即可知道要修多少条路。集合个数的判断也可以根据每个集合只有一原创 2016-06-12 11:04:07 · 246 阅读 · 0 评论 -
图算法—Problem D
图算法—Problem D 题意 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 解题思路 依旧是最小生成树问题,这里用Kruskal算法,把边按权值从小到大到大排好序,每次取最小的边,用并查集的思想查原创 2016-06-25 19:30:20 · 276 阅读 · 0 评论 -
动态规划总结
动态规划总结小序: 最近一个月被动态规划折磨的不要不要的,然而期限已到,该专题被关闭,所以到了写份总结来复习与小结一下动态规划。总体说来,感觉DP的大部分题目都并不易做,虽然有些题目被人称作水题、入门题,不管怎么说吧,基本上关键的就是找状态转移方程了,这也是题目的难点所在。那好,本博客就来复习一下动态规划的基本内容和几类经典题目。基础知识: 什么是动态规划呢,简单来说,动态规划是解决多阶段决策原创 2016-06-01 23:08:12 · 349 阅读 · 0 评论 -
动态规划—Problem J
动态规划—Problem J 题意 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,求出共有多少种走法。 解题思路 递推问题,类似斐波那契数列。分析题目,可得到: dp[1] = dp[2] = 1; dp[n] = dp[n-1] + dp[n-2] (n > 2)。 创建dp数组,把到达每一层的走法放进去,最后根据输入相应输出即可。 感想 难度一般原创 2016-05-02 14:35:51 · 196 阅读 · 0 评论 -
动态规划—Problem Q
动态规划—Problem Q 题意 收集骨头。一个人有一个背包,背包容积是V,不同的骨头有不同的体积和价值,求收集到骨头价值的最大值。 解题思路 背包问题。剖析下问题,“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为dp[i-原创 2016-05-12 20:37:16 · 245 阅读 · 0 评论 -
贪心算法—Problem A
贪心算法—Problem A题意一层楼里有200个房间,每一个在南北侧沿走廊。因为走廊很窄,只有一张桌子可以穿过走廊。从一个房间到另一个房间移动一张桌子可以在10分钟内完成。要想提高移动效率,就必须同时移动多张桌子,但是多个路线即从一个房间到另一个房间经过的走廊如果有重叠的部分则不能同时移动桌子,反之,没有重叠的走廊则可以同时移动多张桌子。题目要求是输入多组需要移动桌子的开始房间和移动到的原创 2016-03-15 14:04:12 · 317 阅读 · 0 评论 -
贪心算法—Problem E
贪心算法—Problem E题意有多个电视节目,每个节目有不同的开始时间和结束时间。在不冲突的情况下求能完整观看的最多节目数。解题思路类比于课上例题,定义结构体,包含开始时间和结束时间。将输入的数据按结束时间升序排列。定义能看到的节目数和起始时间都默认为0。将第一个节目放入后,把时间改为第一个节目的结束时间。往下遍历,以此比较下一个节目开始时间与上一个节目结束时间(已赋值给time原创 2016-03-15 14:20:56 · 379 阅读 · 0 评论 -
贪心算法—Problem N
贪心算法—Problem N题意某公司要统计全年盈利状况,对于每一个月来说,如果盈利则盈利s,如果亏空则亏空d。公司每五个月进行一次统计,全年共统计8次(1-5、2-6、3-7、4-8、5-9、6-10、7-11、8-12),已知这8次统计的结果全部是亏空(盈利-亏空解题思路一共统计了8次,8次都是亏空的,要保证尽量盈利。所以把亏空放到5月份,这时有一个月亏空四个月盈余,如果不能保原创 2016-03-25 14:11:41 · 517 阅读 · 0 评论 -
搜索—Problem_1001-Can you solve this equation?
搜索—Problem_1001题意 数学方程问题,给定一个关于x和y的表达式,其中y是输入的,x是0-100间的数,根据输入的y的值求表达式中x的近似值。 解题思路 所给表达式的函数是单调性的,所以对表达式中x的取值可以采用二分搜索的方法,然后比较逐步调整x的最佳范围,最终找到最佳符合条件的x,并输出。 感想 先做的第二题,又看的这个,算法稍有改变,但题目类似。 AC代码#includ原创 2016-04-05 17:06:09 · 401 阅读 · 0 评论 -
搜索—problem_1002-Strange fuction
搜索—Problem_1001题意 给定一个关于x和y的函数,其中y是输入的,x是0-100间的数,求这个函数表达式的最小值。 解题思路 所给表达式的函数不是单调性的,所以对表达式中x的取值采用三分搜索的方法,然后比较逐步调整x的最佳范围,最终找到最佳值,输出最小值。 感想 题目一目了然显然是利用搜索来提高程序效率得到结果。不过要注意下输入输出的格式。 AC代码#include<ios原创 2016-04-05 16:41:56 · 348 阅读 · 0 评论 -
贪心算法—Problem B&I
贪心算法—Problem B题意要处理一些木棍,第一根的时间是1分钟,另外的,在长度为l,重为w的木棍后面的那根的长度为l', 重量w',只要l 解题思路运用贪心算法。先把这些木棍按长度和重量都从小到大的顺序排列。设length1和weight1是第一根的长度和重量,依次比较后面的是不是比当前的length1,weight1大,是的话把标志flag设为1,并跟新length1,we原创 2016-03-15 17:19:18 · 384 阅读 · 0 评论 -
贪心算法—Problem M
贪心算法—Problem M题意题目很简单,给定两个数分别是n,p;其中p是n的k次方,要求输入n和p,然后计算出k的值并输出。解题思路乍一看问题并不难,想到了cmath库里的pow函数,但一看测试数据发现很大,查找了一下基本数据类型的double发现并未超出它的范围,所以索性就用这种方法来做了,调用pow函数,求p的1/n次方(逆用条件),由于所求是double类型所以对所求数据原创 2016-03-22 16:52:16 · 258 阅读 · 0 评论 -
贪心算法—Problem F
贪心算法—Problem F题意给你一个价格,还有面值分别为1,5,10,50,100(单位:毛)纸币的数量,要你用最少数量的纸币和最多数量的凑出这个价格,输出最少和最多的数量。如果凑不出来,输出"-1 -1"。解题思路最少的数量要用贪心的思想,优先取面值尽量大的纸币来凑这个价格。找最多的数量的纸币问题可以转化为手里剩余的纸币最少,所以,假设手上总共有money毛,而价格为p毛,我原创 2016-03-22 15:53:17 · 343 阅读 · 0 评论 -
贪心算法总结
贪心算法总结一、算法思想 贪心法的基本思路: 从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。 该算法存在问题: 1. 不能保证求得的最后解是最佳的; 2. 不能用来求最大或最小解问题; 3. 只能求满足某些约束条件的可行解的范围。 实现该算法的过程: 从问题的某一初始解出发; while 能朝给定总目原创 2016-04-01 20:55:37 · 2195 阅读 · 0 评论