上一页 1 ··· 3 4 5 6 7 8 下一页
  2016年9月15日
摘要: tarjan缩点 之后跑一边spfa即可 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int N=500010,novis=-1,over=1,nowvis=0; 5 int head1[N],head2 阅读全文
posted @ 2016-09-15 17:13 Absolutezero 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 强连通分量: 首先tarjan缩点重构图 之后,若出度为0的点仅有一个,那么答案即为该点代表的强连通分量中点的个数 否则,答案为0 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int N=10010,M= 阅读全文
posted @ 2016-09-15 11:54 Absolutezero 阅读(302) 评论(0) 推荐(0) 编辑
  2016年9月11日
摘要: 悬线法,直接做就行,不用取反什么的 小改动:l,r,h 遇到障碍点时赋1不赋0 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int N=2001; 5 int c[N][N],l[N][N],r[N][N 阅读全文
posted @ 2016-09-11 21:17 Absolutezero 阅读(264) 评论(1) 推荐(0) 编辑
摘要: 作用:O(n^2)用来解决最大矩阵和问题 思路:对于 m*n 矩阵中的任意一点,覆盖这个点的最大矩形的面积为,该点向左右最大能延伸的长度之和与向上最大能延伸的长度的乘积。 描述:首先 O(n^2) 预处理,对于矩阵上的每一个点,我们可以: 1.从它向上引一条悬线,遇到边界或障碍点停止,h[i][j] 阅读全文
posted @ 2016-09-11 20:11 Absolutezero 阅读(2442) 评论(0) 推荐(4) 编辑
  2016年9月8日
摘要: 思路: f[i][j]表示前i个公司分配j台机器能得到的最大收益 c[i][j]表示第i个公司分配j台机器能得到的最大收益 这样就可以从上往下推 第三重循环控制变量k为前i-1个公司分配的机器数, 那么显然第i各公司能分到j-k台机器 转移:f[i][j]=max(f[i][j],f[i-1][k] 阅读全文
posted @ 2016-09-08 11:10 Absolutezero 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 思路: f[i][j]表示前i步在第j个小组的最短天数 转移:f[i][j]=min(f[i-1][j],f[i-1][x])+f[i][j] 注:当j==1时,x=m;else x=j-1 1 #include<cstdio> 2 #include<cstring> 3 using namespa 阅读全文
posted @ 2016-09-08 10:53 Absolutezero 阅读(186) 评论(0) 推荐(0) 编辑
  2016年9月7日
摘要: 思路: f[i][j]表示第i首歌音量为j是否可行(0/1) 初始f[0][bl]=1; 一层层往下推.最后取第n行最大的j 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 int n,bl,ml,f[51][1001] 阅读全文
posted @ 2016-09-07 15:26 Absolutezero 阅读(215) 评论(0) 推荐(0) 编辑
  2016年9月5日
摘要: 我们可以以北岸城市为关键字将友好城市排序。 这样就将问题转换成,求南岸最长上升子序列LIS。 顺便提一句LIS的几种算法。 首先是O(n^2), 设dp[i]表示以i为结尾的最长上升子序列的长度,则状态转移方程为: dp[i] = max{dp[j]+1}, 1<=j<i,a[j]<a[i]. 其次 阅读全文
posted @ 2016-09-05 21:51 Absolutezero 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 初始状态f[1]=0;f[2]=a[1][2]; 对于每个i,有i-1个中转点j;(中转点可以为1,表示直接到达不进行中转) 这样,可以选择从1直接到达i,或从1到j,再从j到i。取两者最小值。 1 #include<cstdio> 2 #include<cstring> 3 #include<al 阅读全文
posted @ 2016-09-05 21:43 Absolutezero 阅读(157) 评论(0) 推荐(0) 编辑
  2016年9月4日
摘要: 思路: 可以开两个堆:一个大根堆,维护 1~~i-1小的数,一个小根堆维护 i~~N小的数。 当每次查询时,输出小根堆顶,从小根堆取最小数到大根堆; 如果更新时小根堆顶小于大根堆顶,交换两堆顶,维护大根堆。 但是,虽然每次输出小根堆顶元素的时候顺便把最小的元素移到大根堆,但在下一个get之前的add 阅读全文
posted @ 2016-09-04 16:57 Absolutezero 阅读(178) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 下一页