自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 hdu 1069 dp入门 最长上升子序列变形

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069实在太弱。。。。并没有看出这是最长上升子序列的变形。。。想了一点思路写下去发现有的完全不对,是在不知道怎么改了,去看了别人的思路,结果是最大递减升子序列的和。。。感觉懂了。。。思路:首先每个木块都有三种形式,(在默认长一定比宽大的情况下,可以舍弃宽比长大的那三种情况,因为只要这个有长比宽大的,

2015-04-30 20:29:51 597

原创 hdu 2571 dp入门题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571常规dp,刚好让我这菜鸟来找找 找状态转移方程的感觉。。定义dp[i][j]  表示的是第i行j列所拥有的最大的幸运值。dp[i][j] 由三种情况转移而来:1、从上面一个坐标转移而来,即dp[i-1][j] 。2、由左边转移过来,即dp[i][j-1]。3、由他同一行中的 j 的因数

2015-04-30 15:30:13 873

原创 poj 3414 倒水问题 bfs

链接:http://poj.org/problem?id=3414思路:就是bfs,有六种操作,FILL 1或2,DROP 1或2 ,将1倒到2,将2倒到1。要注意的是要使用标记数组vis[i][j] 表示左边的杯子为i升,右边的杯子为j升,如果已被标记说明之前已经出现这种情况,就不要入队。从(0,0)开始bfs。因为题目中需要输出如何倒,那么就需要保存路径。。以前似乎自己还没有写过,只是

2015-04-29 20:34:55 671

原创 poj 3009 dfs

链接:http://poj.org/status?problem_id=3009&user_id=liujc&result=&language=之前写的今天打算看一下之前写的搜索。。。结果发现这题并没有写题解。。题目大意:玩冰球,看10次操作内是否能送到终点,碰到障碍也就是1的时候1消失,冰球停下来。。如果在过程中碰到终点也是完成。。还有就是要注意要将障碍还原。别人的题解:http

2015-04-29 18:45:15 427

原创 soj 2818 dp

链接:http://cstest.scu.edu.cn/soj/problem.action?id=2818背景:自己一直找不出状态转移方程,甚至定义就定义错了。。。猜了好几种,都没办法,最后无奈只能看discuss。附上satan的分析:dp[i][j][k] 左手在i,右手在j,第k个移动 初始化时 k=0 即刚开始手在 左右按键的那个状态第k=0的状态 dp矩阵 0

2015-04-29 18:20:01 479

原创 hdu 1421 dp 入门题

http://acm.hdu.edu.cn/showproblem.php?pid=1421中文题思路:首先要找出怎么将所有的物品组合成一对一对的,题目要求疲劳之最小,也就是一对之中两个物品的重量的差距最小。那么就需要运用排序了,将物品从小到大排序,从遍历物品直到倒数第二个,将每一个物品和下一个物品组合成一对,这样就会发现如果我们先选了这一对,那么下一对就不可以选了,因为两者中有一个元素是

2015-04-28 20:28:24 407

原创 hdu 2084 dp入门数塔问题

http://acm.hdu.edu.cn/showproblem.php?pid=2084转移方程:dp[i+1][j] = max(dp[i][j-1]+a[i][j],dp[i][j]+a[i][j]);我又是愚蠢的正着做···代码:#include #include #include #include using namespace std;#define

2015-04-27 13:33:05 481

原创 hdu 1176 dp入门题

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176转移方程:dp[i][j] = s[i][j]+max(dp[i-1][j],max(dp[i-1][j-1],dp[i-1][j+1]));不过后来发现根本不需要这样开两个直接在原来的数组上处理就可以了。。还有就是其实倒着来做比较方便,这个就是类似数塔问题的。。。正着做一开始

2015-04-27 13:14:16 404

原创 hdu 1087 最大上升子序列

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087dp入门题。。最大上升子序列。定义dp[i] 表示以ai结尾的最大上升子序列。可以由两个状态转移过来,一个是只有ai的子序列,另一个是j转移方程:dp[i] = max(dp[i],dp[j]+a[i]);代码:#include #include #include

2015-04-24 17:11:31 492

原创 最长上升子序列 nlogn poj 2533

链接:http://poj.org/problem?id=2533定义dp[i] 为长度i+1的上升子序列中末尾元素的最小值从前往后遍历整个序列,对于每个aj如果i = 0或dp[i-1]代码:#include #include #include #include using namespace std;#define M 1009#define INF 0x3f3f3

2015-04-23 16:11:29 460

原创 hdu 1811 并查集+拓扑排序

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1811中文题。检查所给的关系是否矛盾,或者不唯一,还是正确的。背景:WA了好久。。。。之前思路一直不是很清晰,后来思路比较好了交了还是错,结果周赛了····然后就又拖了几天,今天上午才把这题又拿出来写,又WA,感觉快崩溃了,都想去搜题解了。还是忍住了。后来发现冲突和不唯一都存在的话要输出冲突。。。查

2015-04-23 10:55:16 718

原创 hdu 1257 最长上升子序列问题

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257dp[i]表示以i结尾的最长上升子序列的长度转移方程dp[i] = max(dp[i],dp[j]+1)代码:#include #include #include #include using namespace std;#define M 100009#define IN

2015-04-22 21:18:37 423

原创 挑战程序设计竞赛 多重部分和问题

就类似完全背包。。不过要恰好等于背包容量。。就是给n种数ai,各mi个,判断是否能从这些数字中选出若干个使他们的和为v。用dp求解,dp[i+1][j]表示前i种数字能否加和得到j。dp[i+1][j] 只要dp[i][j-k*ai]有一个为真那么就为真。(0代码:#include #include #include #include using namespace std

2015-04-22 20:22:57 496

原创 01背包 背包容量大时新解

01背包在之前都做过,但是好像从来没有考虑过如果背包容量超级大的时候怎么办这个问题。。。因为01背包的时间复杂度是O(n*V)  V为背包容量。挑战上的这题就给了个V的范围在1~10^9,这如果按照以前的方法做想必估计就会妥妥的超时了,然而这道题给了一个很方便的地方就是物品的个数与每个物品的价值都不大,所以这里可以转换一个思路,转变为求前i个物品中价值为j时最小的重量。这样最后找出dp[n]中重量

2015-04-22 18:26:34 1517

原创 hdu 1159 最长公共子序列

链接http://acm.hdu.edu.cn/showproblem.php?pid=1159基础dp,挑战上的题目。主要在于体会如何找到状态转移方程,dp的思想我现在理解来看觉得是在于怎么将一个大的问题分解成多个子问题求解,找到子问题的最优解,在比较几个子问题的最优解从而得出当前问题的最优解。然而又可以将每个子问题像这样的方式分下去,找到最优子结构。一直分解问题直到最开始的边界情况,也

2015-04-22 18:08:36 519

原创 poj 1094 拓扑排序

链接:http://poj.org/problem?id=1094大意就是给你一堆关系,让你判断什么时候能确定出这个序列,或者什么时候出现矛盾,又或者是不能确定的。首先判断拓扑排序是否是确定的,就是判断在队列中的元素的个数是不是时刻都不大于一,如果是这就是确定的。还有就是矛盾了,也就是判环,看入队的元素的个数是不是小于节点的个数,如果是那么就有环,因为有环的话,最后是找不到入度为零的节

2015-04-18 20:32:43 399

原创 codeforces 334B

http://codeforces.com/problemset/problem/334/B题目大意:给你8个点,看是否能够竖着切三刀,横着切三刀。换句话说就是有3个xi,3个yi,可以组成任意的(xi.yi)除了(x2,y2)。思路:用一个结构体存储。将所有点进行一个排序,x小的在前面,如果相同y小的在前面。判断s[0]到s[2] 是否x都是一样的,且y都是不一样的。再换一列,先看是否在

2015-04-18 16:09:24 517

原创 codeforces 510B dfs

题目链接:http://codeforces.com/problemset/problem/510/B题目大意:找出一个相同字母的环,之前作比赛的时候就一直超时,写的挫的要死的dfs,今天又看到这题,又来做了下,还是运用dfs思路:运用dfs进行查找,并将每个点进行标记,如果找到之前已经标记过的点,那么就说明了这个形成了一个环啊。但是这里有个问题就是,如果一个点进行深搜的时候找到了他的上一

2015-04-18 15:17:09 846

原创 poj 3069 贪心算法

题目链接:http://poj.org/problem?id=3069一开始想了一种思路错了,最后发现就是从第一个点开始找到在范围内却又最远的点标记上,然后在从这个点找范围外最近的点,重复之前的操作就行了。代码:#include #include #include #include using namespace std;#define M 1009#define IN

2015-04-17 23:23:55 498

原创 soj 1824 并查集

http://cstest.scu.edu.cn/soj/problem.action?id=1824就是比较裸的并查集,就是找出0所在集合中有几个人。。输入的时候将每组后面的数都跟第一个数进行合并,并且在合并的时候保证将小的那个数作为父节点,这样的话0是最小的最后肯定是在根节点,找答案的时候就直接判断每个点的根节点是不是0就可以了。代码:#include #include #

2015-04-17 13:40:19 644

原创 hdu 2112 最短路 dijkstra优先队列

http://acm.hdu.edu.cn/showproblem.php?pid=2112还算蛮裸的,就是需要运用一下map,将字符串映射成一个int,对于map的运用还不够熟悉。。。Map如果要查找一个元素是否出现在这个map之中的话就可以运用.count(),看他出现的次数,如果是0,肯定就没有出现过。还有一个就是要注意,每一个kase都需要重置这个map,运用.clear()。

2015-04-16 16:22:19 505

原创 soj 4243 最短路 spfa实现

题目链接:http://cstest.scu.edu.cn/soj/problem.action?id=4243第一个不是太水的最短路问题,感觉李大婶说的很有道理,图论的关键在于怎么建图,这题着实体会了一下,还是看一姐ppt的思路才有点想法的。主要的思路就在于对于每一个格子都会有所对应的一个要消耗的生命值,每一个

2015-04-13 23:52:34 643

原创 poj 2387 最短路 spfa 实现

http://poj.org/problem?id=2387题目大意就是求最短路,从n到1的最短路。就用来熟悉一下spfa的写法。一开始贡献了好几次wa,结果发现是因为n,m写反了。。。。没有什么拐弯的地方,来熟悉spfa直接附上代码:#include #include #include #include #include using namespace std;#de

2015-04-13 09:31:58 1197

原创 hdu 2680 最短路基础题 spfa实现 算法总结

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2680题目大意,就是一个人可以从多个起点开始出发,看到终点的最短路是多少。。只有可以运用和hdu2066一样的思想,对于每个起点可以看成是跟最最开始的点之间有一条权值为0的边。可以把最开始的点记做0点。那这样就可以使用单源最短路了。之前都没有用过spfa,今天来运用了一下。算法大致流程是用

2015-04-13 09:00:31 1049

原创 hdu 2066最短路 dijkstra 及其优先队列优化

http://acm.hdu.edu.cn/showproblem.php?pid=2066 一开始想运用跟之前soj的办法,就是把每个起点都进行一次dijkstra,然后记录下每个顶点下的最短路。。后来发现其实对于车站可以看做与起点之间有一条权值为0的边,那么这样就可以直接使用单源最短路算法了。0、要注意的就是这里并没有给出顶点的个数,只知道上限是1000,就要记录下顶点的最大的序号

2015-04-12 15:51:01 659

原创 单源最短路问题 bellman-ford算法

贴一个Bellman-Ford算法寻找单源最短路径的时间复杂度为O(V*E).

2015-04-11 20:07:10 646

原创 单源最短路问题 dijkstra算法 总结

Dijkstra(迪杰斯特拉)算法,用于计算一个节点到其他所有节点的最短路径。要注意的是这个算法中路径的权值不能有负边,如果有负边的话要运用bellman ford算法。学习了一下dijkstra算法,感觉跟最小生成树的Prim算法有点类似。感觉dijkstra也是一个贪心的策略,用集合S表示的是已经找出最小路径的点,用dis[]来表示每个点当前距离源点的最短距离。再用一个数组来存储两点之

2015-04-11 17:09:16 1049

原创 hdu 1162 最小生成树

与1875类似,所以这里不再用kruskal而是用了prim。1Y题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162、就是最普通的prim,只是权值变成了double型#include #include #include #include #include using namespace std;#define M 1

2015-04-09 16:01:26 447

原创 hdu 3371 最小生成树 prim

http://acm.hdu.edu.cn/showproblem.php?pid=3371题目大意:告诉你有几座城市,再告诉你哪两座城市之间建路要多少钱,在给你哪几个城市之间已经有路,不需要再建。要求的是要使所有城市之间连通最小要花费多少钱。这里我用了prim算法。。保存城市之间的权值,对于已经建好的城市,将他们的权值赋为0。还有就是要判断是否能找出最小生成树,如果不可以就输出-1,如果

2015-04-09 15:52:32 690

原创 poj 1789 最小生成树 kruskal实现

题目链接:http://poj.org/problem?id=17891Y题目大意:对于每一个点给你一个字符串,两个点之间的距离就是两个点所对应的字符串对应位置有几个不同的字符。。找出最小生成树。把Kruskal换成了用一个struct来记录边的两个点,以及这条边的距离。这样就不需要多开一个数组。。。之后用一个结构体排序,让长度最小的边排到最前面。。代码:#include

2015-04-09 15:41:10 714

原创 hdu 1875 最小生成树 点用坐标表示

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1875题目大意:中文题就是说找出怎么样修的路最短,然后还需要判断一下是否能修出这样一条路。这次找了好久的错误orzzzzzzzz第一个错误在于约束条件是不小于10不大于1000,说明要有等于号。。第二个错误kruskal判断边的两点不在一个集合后应该要将这两个集合合并。。。几天没写居然忘

2015-04-08 21:26:45 866

原创 hdu 1325 判断是否是一棵树

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1325题目大意:就是判断这个图是不是一棵树,并且说明了树每个节点之间的指向都只有明确的一条。一直TLE感觉不科学。。。结果看了discuss说只要是负数就结束,并不一定要-1 -1结束。。。好吧跪了,对于结束条件要仔细回到题目中找。。还有就是这题居然不告诉我数据范围orzzzzzz又出现

2015-04-08 19:18:27 775

原创 hdu 1272 并查集

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272题目要求:就是判断一个无向图是否是连通图,并且这个图不能有环。。这数据有点坑爹,当一组数据直接只有0 0 的时候要输出Yes,个人感觉0 0 表示的是没有这个图,为什么要输出Yes。这我也是看了别人说的才A的。做这题的时候,一开始自己有点想当然了,;以为应该就只是连通图的判环问题而

2015-04-08 18:01:48 286

原创 hdu 4324 拓扑排序

链接:http://acm.hdu.edu.cn/showproblem.php?pid=4324题目大意:就是拓扑排序判环,如果存在环的话输出Yes,不存在的话输出No。一开始超时了,觉得是不是因为cin,cout。改了,果然变成WA了orzzzzz后来发现错在Yes,no的输出上面。。。打成了YES NO。。还有就是case的输出也是错了。。感觉太过于急着想要AC这道水题了。。

2015-04-08 17:48:57 487

原创 soj 2222 health power 01背包变形

题目链接:http://cstest.scu.edu.cn/soj/problem.action?id=2222题目大意:就是有一些物品,有两种属性,可以加hp,也可以加分数,但是只有你在血量满的时候,吃到这个物品才会加分数,不然没满的话,只能加血量。。要求怎么样才能使分数最多。思路:既然要使得到的分数最多,那么就需要让用来加血的物品的分数总和最小这样就能保证剩下的物品都用

2015-04-08 17:34:55 582

原创 hdu 1863 最小生成树

http://acm.hdu.edu.cn/showproblem.php?pid=1863还是最小生成树,还是用了kruskal写,就是有点不一样的地方在于,他要让你判断是否能够保证畅通,也就是是否能有最小生成树,其实就是判断是不是连通图吧,因为连通图一定会有最小生成树。一开始我的想法是,先进行一次并查集的合并与查找,看一下有几个集合,如果只有一个集合的话就是连通图,肯定有最小生成树存在

2015-04-05 13:28:40 436

原创 hdu 1233 最小生成树kruskal

http://acm.hdu.edu.cn/showproblem.php?pid=1233学完kruskal算法,自己的理解就是也是一个贪心的策略,记录下每次的起点和终点,以及他们之间的权值,对边的权值进行排序,每次找出权值比较小的边,判断他与之前所选择的边是否会形成回路,如果不会的话就往生成树中加入这一条边,如果会就舍弃,如何判断回路,就需要用到并查集,找出起点和终点各自的根节点,如果不相

2015-04-05 13:03:31 490

原创 hdu 1856

http://acm.hdu.edu.cn/showproblem.php?pid=1856还是并查集,不一样的地方就是找出最大的那个集合的元素个数。代码:#include #include #include #include using namespace std;#define M 10000001#define INF 0x3f3f3f3fint p[M];int

2015-04-05 13:01:18 225

原创 并查集 总结

http://acm.hdu.edu.cn/showproblem.php?pid=1232自己学完后总结一下吧,并查集,我的理解就是一个查找与合并,用一个find函数来查找自己的祖先也就是根节点,在这过程中还可以进行路径压缩,就是让这个点直接变到根节点之下,还有就是合并,找出这两个点的根节点,如果根节点不相同的话,就将一个根节点放到另一个根节点下面。这道题的就是用并查集做,找出总共有几个

2015-04-05 12:01:21 449

原创 hdu 1879 最小生成树 prim算法实现

http://acm.hdu.edu.cn/showproblem.php?pid=1879这题好诡异,用G++直接超时,c++也就400ms过。。。。说一下最小生成树的prim算法按照我的理解,它的主要思想就是说:任意取一个点(通常是第一个),用一个dis[i]来存储终点为 i 的到生成树中任意一点的最小的距离, 在已经加入生成树的节点外找一个点,这个点到生成树的距离要是最小,(不论

2015-04-05 11:33:25 490

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除