- 博客(56)
- 资源 (2)
- 收藏
- 关注
原创 Problem4-1018
简单题意:编号 0 -> N-1, 然后有两种操作,M : 合并操作, 2 种邮件合并为一种;S : 分离操作, 将一封邮件独立出去单独占一个集合,最后题目要求统计集合的个数. 解题思路:删作为其它某些点的桥梁,通向根节点的桥梁,也就是ancestor[x]不变!若再删除,再用其它点代替,那么曾经的替代品也成了桥梁代码如下:#include #include
2016-07-07 07:38:59
295
原创 Problem4-总结报告
图的相关算法 图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。图论,是ACM程序设计这门课的最后一个专题,我觉得也是最难的一个专题,上述所提及的算法,只是图论中算法的极小一部分,图论的综合性比较强,比如
2016-07-06 17:25:29
484
原创 Problem4-1009
简单题意:在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?解题思路:思路:floyd代码如下:#include#includeconst int N=105, INF=9999999;int d[N], w[
2016-07-06 17:22:40
764
原创 Problem4-1013
简单题意:车票的价格决定于两个站点之间的距离。给出了描述距离和价钱之间关系的表格。求花费最少解题思路:用Floyd算法,借鉴了网上的算法,他们用的是_int64,直接用int不知道有没有问题;代码如下:#include #include #include using namespace std; const __int64 inf = 1e18
2016-07-06 17:18:11
236
原创 Problem4-1006
简单题意:给出村庄(编号用字母表示)与其他村庄之间道路的维护费用(村庄不一定和其他村庄有直接相连的道路),选择适当的道路进行维护,使得所有村庄都能通过被维护的道路连通而且维护费用最少。解题思路:又是求最少(小)的问题,还是换汤不换药,重用Problem D的代码,不就是把村庄序号改成字母了嘛,用ASCII码转换成数字,对于“村庄不一定和其他村庄有直接相连的道路”,没有直接道路相连的村庄,假
2016-07-05 22:24:52
288
原创 Problem4-1004
简单题意:给你一些镇子,和镇子之间的距离,现在要修一条路,把所有镇子连起来,求路的最短距离。解题思路:最小生成树问题,我采用的还是KRUSKAL是第一题的简化版,详情请看第一题。代码如下:#include #include #include using namespace std; const int N = 105; int fathe
2016-07-03 22:08:26
254
原创 Problem4-1019
简单题意:给定一系列数对,例如a和b,表示a和b不是同一种性别,然后不断的给出这样的数对,问有没有性别不对的情况。解题思路:并查集合并之前判断是否冲突,不冲突就合并,用opp保存立的单位,set保存并查集中的元素。opp保存对立单位。#include#includeusing namespace std;int set[2005];int find(int x)
2016-07-03 22:05:25
184
原创 Problem4-1011
简单题意:虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好
2016-07-02 20:51:16
251
原创 Problem4-1012
简单题意:n*m大小的矩形,起点在矩形的左上角, 终点在右下角,里面一个小矩形代表一个街区(block)。每个小矩形的边长都是2520, 小矩形的边有一个速度限制,范围是0~9, 如果是0表示这条边不能行驶。解题思路:绝对是一道水题。每一条边是 "数字"+“空格”+“符号”的形式, 数字表示这条边的限速, 符号表示这条路是单向(还分东西, 南北)的还是双向的。处理完复杂的输出和读取问题之
2016-06-30 22:20:14
257
原创 Problem4-1008
简单题意:给你一个不成环的图,让你在只能构成一个环的情况下,求出这个环的权值和的最大值解题思路:并查集问题,还是按照以前的套路,当边上的两个节点的根节点相同时,会构成环,这时候就要考虑是构成一个环还是构成两个环,如果构成一个环,那么保留,如果是两个环,就舍弃,把整个图遍历之后,输出最大值即可代码如下:#include #include #include #incl
2016-06-28 10:40:31
288
原创 acm课程总结
ACM课程总结 ACM的课程学习之路自昨天起结束了,本该听他们删掉的选修课程,还是一意孤行地坚持了下来,接触ACM三个月零15天,在HDU做了五六十道题,其实做了多少题目并不是最重要的,重要的是学到了什么,首先简单的总结一下。学到的算法小结:掌握的非常熟悉的算法: 简单的动态规划:包括思考问题的方式和角度,能从简单的问题中提取出动态规划的状态转移方程,关于矩阵内部运算的DP问题比较熟悉,对
2016-06-28 10:30:50
1284
原创 Problem4-1005
简单题意:省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。解题思路:此题在1004题的基础上做了些许改动,即有些城镇之间早已有了路,把这个描述转化成代码的话很简单,只要让这条边的权值
2016-06-27 21:28:21
299
原创 Problem4-1003
简单题意:某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?解题思路:并查集问题,只要找出根节点的数目即可,很简单。代码如下:#includeint bin[1002];int fi
2016-06-27 21:23:52
387
原创 Problem4-1001
简单题意:给你一些城镇,以及各个镇之间的距离,现在要修建道路,把这些镇子穿起来,已知一些镇子之间已经有了道路,现在求施工的最短路径。解题思路:这是最小生成树问题,我采用的是kruskal算法。
2016-06-23 20:50:39
241
原创 Problem3-总结报告
综述一 :动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,
2016-05-29 17:51:42
450
原创 Problem3-1013
简单题意:一头母牛每年生一头小母牛,每头小母牛长到第四年的时候也能生一头小母牛,求第n年母牛的数量解题思路:利用递归,前四年f(n)=1,但到了第五年,每年都有小母牛生出小母牛,得出递归公式:f(n) = f(n-1) + f(n-3),接下来就好计算了。代码如下;#include using namespace std;int num(int a){
2016-05-29 17:45:08
274
原创 Prolem3-1018
题意:空储蓄罐,有一定的质量,存钱,存满,得到的最下价值思路:属于完全背包问题,和老师讲的一样!代码如下:#include #include #include #include #include using namespace std; int v[10005]; int w[10005]; int dp[10005];
2016-05-27 21:41:06
252
原创 Problem3-1008
简单题意:在二维空间中,选择一条幸运值最大的路,每次的走法只能 向前走一步,或者向下走一步,或者向前走当前列数的 k 倍的列数位置(行都是当前行,k>1),求出达到右下角那点时所能得到的最大幸运值。解题思路:每个单元存此位置到右下角的最大值,先算出最后一行(因为最后一行只可以向右走)和最后一列(只可以向下走),然后从魔王的左上角那个位置开始逐个填表,对于这些位置,能走的路线是往下一
2016-05-24 08:25:39
299
原创 Problem3-1016
简单题意:整体来讲,就是在一个二维平面内走格子,规则是:一次只能移动一次,并且不能往回走,同时走过的格子不能再走第二遍,求走n步不同的解决方案!解题思路:f[n]表示走n步的方案数,x[n]表示向下走的方案数,z[n]表示向左右走的方案数;所以 f[n]=x[n]+z[n],x[n]=x[n-1]+z[n-1];z[n]=x[n-1]*2+z[n-1]所以f[n]=2*f[n-1]+x[n
2016-05-21 17:23:49
243
原创 Problem3-1022
简单题意:小偷偷东西,给出他被抓的几率,求他能偷到的最大财富。解题思路:既然是最大财富,那就是当他正好被抓到时,钱最多,在将被抓概率转化为存活概率,利用概率相乘原理,转化为01背包问题(怎么又是01背包)即可。代码如下;#include #include using namespace std; struct Bank {
2016-05-20 21:23:11
218
原创 Problem3-1010
简单题意:有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?解题思路:对于两层楼梯,你可以选择一步跨上,也可以选择分两步跨上去,一共这两种方法,所以对于N层台阶,就有f(n)=f(n-1)+f(n-2).代码如下;#include using namespace std; int main() {
2016-05-17 21:24:16
251
原创 Problem3-1011
简单题意:有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。解题思路:首先先代入几个数进行运算,通过简单归纳总结出一定的规律,即a[i] = a[i-1] + a[i+1], 然后就按照惯有的套路进行计算即可,最重要的是找到匹配的公式。代码如下:#include using namespa
2016-05-14 19:53:30
270
原创 Problem3-1017
简单题意:第一行输入几组数据,第二行第一个数字代表物体个数,第二个数代表总体积 第三行输入的是物品的价值,第四行输入的是物品的体积。物体不能拆分,已知背包的总体积,求最大能获取的价值是多少。解题思路:将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前
2016-05-14 19:49:54
267
原创 Problem3-1003
简单题意:求最长升序子列。解题思路:这个问题是求最长升序子列。如果 f(n)>f(n-1),则 在n除的最长升序子列等于在n-1的加一,按照这种方法循环下去即可。代码如下;#include #include #include using namespace std; const int maxn=1002; int num[maxn];
2016-05-13 21:07:34
268
原创 Problem3-1005
简单题意:给定一块砖的 长宽高,让你叠金字塔,下面砖的表面积必须大于上面的,求能叠到的最高高度。解题思路:先将给定的所有的砖分成三种,这样的话,一块砖就有三种形态,然后将所有的排序,然后挑选,最后将所选的高加到一起即可。代码如下:#include #include #include #include #include #
2016-05-12 16:48:21
228
原创 Problem3-1024
简单题意:首先给出物品数量和手中资金,人后每样物品给出价格,需要购买时手中至少需要多少资金,还有物品本身的价值,要求求出最大资金。解题思路:一定要按q-p排序,不要按价值排序。代码如下:#include #include using namespace std; //crucial #define N 500 #define M 5000
2016-05-10 11:59:55
262
原创 Problem3-1014
简单题意:要求条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分.输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。解题思路:用数学方法找去规律,假设有n条折线,则分的面最多为2*n*n-n+1;代码如下;#includeu
2016-05-10 11:08:13
187
原创 Problem3-1015
简单题意:就是将一个十进制数转化成一个二进制数;解题思路:number1=number%2;number2=number1/2;并用数组记录;然后最后倒叙输出;代码如下:#includeusing namespace std;int main(){int n;while(cin>>n){int i,a[11];if(n==0)co
2016-05-08 15:01:45
216
原创 Problem3-1004
简单题意:许多的唯一主要因素是2,3,5或7被称为一个不起眼的数字。序列1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24,25,27,...示出第一20谦虚数字。搜索结果编写一个程序,发现在这个顺序打印第n个元素结果解题思路:谦卑number从1为"始祖",剩下的所有数,其实都是在此基础上乘以2,3,5,7演化出来的,:f[t]=mi
2016-05-08 14:56:35
280
原创 Problem3-1002
简单题意:求两个字符串的最长公共子序列解题思路:设c[i][j]为字符串a的第i个字符与字符串b的第j个字符为止的最长公共子序列长度,那么有两种情况:1.当a[i] == b[j]时,c[i][j]应该是前一个状态的最长公共子序列长度 + 1,而前一个状态是c[i - 1][j]呢,还是c[i][j - 1]?两者都不是,因为a[i]与b[j]匹配,a[
2016-05-07 21:39:17
223
原创 Problem3-1006
简单题意:从数字塔的塔尖的第一个数走到最下面所能得到的最大的数字和。解题思路:每个父节点会对应两个子节点,自下向上,父节点的值加上两个子节点中较大的一个的值,那么此时这最后一行的父节点又会是上一行的子节点,上一行的父节点再选这一行的子节点中较大的相加(也是最后一行的父节点)。因为每次都是选取的最大的子节点的值相加,那么当到达数塔塔尖的父节点时,它的值必定是最大。代码
2016-05-07 21:38:33
219
原创 Problem3-1001
简单题意:在组成环的n个数中求出不超过m个连续的数相加之和最大时的最大值、起始位置和终止位置(如果大于n则要减去n)解题思路:设一数组sum,sum[i]含义:所有以a[i]为结尾的序列的序列和构成一个集合,此集合的最大值就是sum[i]如1,2,3.所有以a[2]=3为结尾的序列的序列和集合是{6,5,3},因而sum[2]=6.sum的状态转移方程:sum[i]
2016-05-07 18:49:21
225
原创 专题二总结报告
一 ·首先是在写程序时遇到运算符,应该考虑的问题:(1) 一旦做乘法和加法(尤其乘法),就要考虑到会不会有整数溢出的现象,要用32位整数还是64位还是大整数.(2)一旦在有取模的运算中,做减法一定要考虑会不会出现负数,负数取模在不同的语言中结果是不一样的,所以最好的做法是加特判。(3)一旦有除法的运算,一定要考虑除数是否为0,有的话就要写特判。二·关于深度优先搜索和广度优先搜索:
2016-04-23 15:30:14
594
原创 Problem1007
简单题意:有n条绳子,分成11段相等的,问能使得最长为多长。 解题思路:直接二分答案,看二分到的值能否被剪成至少k断。 代码如下:#include#include#includeusing namespace std; #define N 10000#define exp 1.0e-9 int n,k;double num[N],su
2016-04-23 14:57:47
210
原创 Problem1003
简单题意:生日聚会上,来到的所有朋友都会领取一块饼,但是要求的是所有人都要拿到大小相同的饼!题目要求输出的是:每个人尽量拿到的最大的饼的体积是多大。这里的饼的形状是高为1的圆柱形。V=底面积*高!解题思路:求出每块饼的面积s[i],并记录面积最大的s[i]为maxs,然后在0~maxs之间进行二分得到mid,判断是否每个人都能得到面积为mid的饼,如果能则mid=left,否则right=mi
2016-04-23 11:11:14
266
原创 Problem1020
简单题意:两个相邻圆圈之和为素数解题思路:从题意中不难看出,和以前的试题很相似,用dfs进行深搜,判断相邻的两个之和是否为素数代码如下:#include #include #include #include using namespace std;const int maxn=25;bool visit[maxn];int num[maxn]
2016-04-22 21:51:44
212
原创 Problem 1027
简单题意:倒可乐,分成相同的容量,先判断能不能到相同,再求最少到多少次解题思路:广度搜索,有目标,,一直到倒可乐, 达到目标为止代码如下:#include#include#include#includeusing namespace std;bool is[101][101];int m, n, s, si, sj;struct no
2016-04-22 19:56:06
226
原创 Problem 1009
简单题意:判断是否能完成连连看,规则与我们玩的规则差不多,但不能从外围连线,这与传统的玩法有区别解题思路:这道题将BFS做一点小小的变形,即每次让一个方向的可能点全部入对列,这样能够使得拐弯次数限制到最小,标记的变量要设四个方向,每次走过的点要标记两个方向,向前和向后,显然不可能再次走到这一点以相同的方向或者反过来。其他就和一般的BFS差不多了此题虽然没做出来,可是大体题意跟思路已
2016-04-21 09:21:50
255
原创 Problem1014
此题与上题一样,简单题意:有n层电梯,输入a,b,要求你从a到b,第i层电梯可以升降ki层,但是不能小于1或大于n,计算能否到b;解题思路:解题思路: 利用数组进行标记,从第一层进行枚举向上或向下操作,若都不行,则不能完成代码如下:#include #include using namespace std; const int N=200+5;
2016-04-21 09:11:23
198
原创 Problem1013
简单题意:有n层电梯,输入a,b,要求你从a到b,第i层电梯可以升降ki层,但是不能小于1或大于n,计算能否到b;解题思路:解题思路: 利用数组进行标记,从第一层进行枚举向上或向下操作,若都不行,则不能完成代码如下:#include #include using namespace std; const int N=200+5; const int
2016-04-20 10:49:54
198
python遗传算法解决八皇后问题
2018-11-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人