自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我是蒋卫升呀~

竞赛算法

  • 博客(9)
  • 收藏
  • 关注

原创 POJ 3259 Wormholes (判负环)

题目连接 题意:给你m条无向边,w条有向边(权值为负),判断图中是否有负环? 思路:bellmoon_ford最短路判负环,时间复杂度是o(VE)。 #include <bits/stdc++.h> using namespace std; const int maxn = 505,inf = 1e5+10; struct node { int u,v,w; }a[5500...

2020-04-27 22:50:37 138

原创 HDU1074:Doing Homework (状压DP)

link 题意:给你若干作业,作业截至日期,和完成作业需要的时间,但是如果一个作业超过他的截止日期,那么

2020-04-16 12:59:19 124

原创 POJ 炮兵阵地 (状压dp)

link 中文题意哦~ 思路:跟矩阵相关的转压dp,相当于暴力枚举,但是不是一个一个的枚举,而是一个状态一个状态的枚举,也可以理解成一个集合一个集合的枚举,这题限制条件有点多,我们设dp[ i ][ j ][ k ]表示枚举到第i行,前一行的状态是j,前前行的状态是k的最多炮兵数,如果直接枚举时间复杂度是不ok的,我们可以预处理出行的合法的所有状态,然后取枚举。 代码: #inclu...

2020-04-12 12:11:52 155

原创 HDU 方格取数(1) (状压DP)

link solve:设dp[ i ] [ j ]为枚举到第i行,状态为 j 的数的最大值,那么,枚举上一行的状态,如果没有直接相邻的边,就转移,最后答案就是所有状态的max。这题会卡空间,可以用滚动数组,也可以计算出行的所有的可行状态,大概是2e4,然后把所有的状态保存下来,这样时间复杂度还是不ok的,因为枚举了两行状态和行,时间复杂度4e8*20 = 8e9,但是样例水呀,就过去了,正...

2020-04-12 11:32:40 182

原创 P1896 [SCOI2005]互不侵犯 (状压dp)

题目连接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 思路:设dp[ i ][ j ][ k ] 为第i 行摆放国王状态为 j ,棋盘上国王数目为k的方案数,那么首先处理出第一行的状态,跟矩阵相关的转压dp基本套路就是处理出第一行,然后枚举后面的行,枚举当前行前一行的状态,枚举当...

2020-04-09 15:03:25 298

原创 P1879 Corn Fields G (状压dp)

link 题意:有一块n*m的田地,0代表贫瘠,不能种东西,1代表肥沃,问,要想种的土地两两之间没有公共边,并且不能种在贫瘠土地上一共有多少种方案,全不种也是一种方案。 思路:dp[i][j],代表第i行种植土地状态为j的土地方案数,先预处理出第一行的状态,即dp[1] [1—n],转移就是: dp[ i ][ j ] += dp[ i - 1 ] [ k ],(k是与j没有公共边 &a...

2020-04-09 12:45:57 110

原创 HDU Max Sum Plus Plus (二维dp)

link 题意:给你一个数组,有n个元素,选择m段两两没有没有交集的连续的段,输出这m段的和的最大值。 dp[ i ][ j ] 为 j 前面且包含 j 在内的数中选择 i 段的最大值,那么,dp[ i ][ j ] = max(dp[ i ][ j - 1] , dp[ i - 1][ k] ) + a[ j ] ,(k<j) 注意的是dp[ i ] [ j ] (i > j...

2020-04-07 13:15:30 138

原创 leetcode 516.最长回文子序列 (区间dp)

link 题意:给你一个字符串求最长回文子序列。 这是区间dp的经典问题,设dp[ i ][ j ] 为区间i到j中最长回文子序列的长度。 当s[ i ] == s[ j ] 的时候,dp[ i ][ j ] = dp[ i + 1][ j - 1] + 2; 当s[ i ] != s[ j ] 的时候,dp[ i ] [ j ] = max( dp [ i + 1 ][ j ] , ...

2020-04-05 14:13:20 200

原创 手写堆

堆是一种完全二叉树,有大根堆和小根堆两种,他们的主要区别在于,大根堆父节点的权值一定比儿子大,而小根堆反之。 初始化:我们考虑用heap数组来存堆,如果是小根堆,就将数组从小到大排序,这样是肯定能满足堆的性质的,大根堆反之。 如何往堆中添加元素呢?我们把要添加的这个数先放在堆的最后一个元素的后面,然后将他与他的父亲进行比较,如果他比他的父亲小/大,就将其与其父亲交换,交换之后重复这...

2020-04-03 19:40:49 99

空空如也

空空如也

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

TA关注的人

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