自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

L.

天将明

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

原创 POJ-3281 Dining(最大流)

设容量为1,流量为0的边为edge. 用0表示源点,从零到每个食物之间连上edge,在从食物到相应的牛上连上edge,再从第i个牛到第i个牛上连上edge,在从牛到饮料上连上edge,从饮料到汇点连上edge. 食物标记:1-f; 第一次n头牛f+1, f+n; 第二次n头牛f+n+1, f+2*n; 饮料:f+2*n+1, f+2*n+d; 汇点:f+2*n+d+1; #includ

2016-05-31 16:59:48 214

原创 ZOJ-3777 Problem Arrangement(dp状态压缩)

dp[i][j],若i中有temp个1则表示为前temp个物品已选好位置,且他们的位置情况用i的二进制位表示.j表示在i情况下达到intersting value值为j是的选法个数。 #include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <cstring>#include <qu

2016-05-30 10:54:14 285

原创 HDOJ-1255 覆盖的面积(扫描线)

用len1[]表示相应区间覆盖了一次的长度,用len2[]表示相应区间覆盖了2次或2次以上的长度.cnt[]表示响应区间覆盖的次数.#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define maxn 1005using namespace std;struct Node{ Nod

2016-05-28 14:12:43 253

原创 HDOJ-1542 Atlantis(扫描线)

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define maxn 105using namespace std;struct Node{ Node(){ } Node(double a, double b, double c, int d){ x

2016-05-27 17:08:31 223

原创 HDOJ-1540 Tunnel Warfare(线段树+二分)

当a村庄存在时,用二分找到1到a-1内核a村庄相连的最大村庄数目,再找到a+1, 到n内和a村庄相连的最大村庄数目#include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <cstring>#include <queue>#include <cmath>#include <stac

2016-05-26 12:17:18 268

原创 HDOJ-2089 不要62

用dp[i][j]表示长度为i,第一个数字为j的不含不吉利数字的个数。状态转移方程:dp[i][j] += dp[i-1][k] 0<=k<=9 #include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <cstring>#include <queue>#include <cmat

2016-05-25 17:57:40 238

原创 HDOJ-4027 Can you answer these queries?

因为每个数最多根号7次就变为1了,所以对区间进行根号操作时,直接一个一个根号就行了,对于sum[n]对应的区间[l, r],若sum[n] == r - l + 1,就不用操作了。题目所给的X和Y,Y可能小于X。#include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <cstring

2016-05-25 15:24:43 184

原创 ZOJ-1610 Count the Colors

这道题把每个点表示成线段,比如a表示为a到a+1之间的线段,那么就可以用线段树区间更新加上延迟标记来完成.#include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <cstring>#include <queue>#define maxn 8005using namespace s

2016-05-24 16:41:13 235

原创 HDOJ-1698 Just a Hook

区间覆盖问题,用到线段树,延迟操作.#include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <cstring>#include <queue>#define maxn 100005using namespace std;typedef long long ll;int num[

2016-05-23 23:29:08 211

原创 HDOJ-2196 Computer

这道题是求从树的每个点出发的最长链长度。先任选一个点a, 从a深搜找到距它最远的点b,再从b开始深搜找到距b最远的点c,则b和c的距离则为树的直径。接下来求树上每个点到b的距离p1[], 到c的距离p2[],那么第i个点出发的最长链长度为man(p1[i], p2[i]).#include <cstdio>#include <iostream>#include <vector>#include

2016-05-23 12:20:27 256

原创 Codeforces Round #316 (Div. 2) D. Tree Requests

用深搜为每个结点建立一个时间序in[], out[],在搜索过程中把在同一深度,同一颜色结点的时间保存起来。查询的时候,若结点为v, 则所查询的所有节点的时间序在in[v]和out[v]之间,再用二分查找各个颜色结点个数。#include <bits/stdc++.h>#define maxn 500005using namespace std;vector<int> v[maxn];vect

2016-05-21 19:05:22 329 3

原创 Codeforces Round #352 (Div. 2) Robin Hood

用二分找到穷人财产的最大值a, 富人财产的最小值b. 若b > a,答案为b - a; 若b <= a,则求出n个人的财产总合sum,若sum % n == 0,则答案为0,否则为1.#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#define maxn

2016-05-18 12:02:52 209

原创 Codeforces Round #352 (Div. 2) C. Recycling Bottles

假设两人从垃圾桶出发捡完所有瓶子走过的距离为sum,接下里要做的就是选择两人从起始点出发捡的第一个瓶子(两人中有一个可以不捡瓶子,就是站在原地不动),更新sum, 从而使sum达到最小。#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#define maxn

2016-05-17 20:20:47 225

原创 FZU-2218 Simple String Problem

因为最多有16中字母,所以可以用dp状态压缩,用int中的前16位每为表示一个字母是否出现。先求出字母状态为i的最大长度dp[i]为多少,再求出dp[i]表示的字母状态i,及其子集的最大长度,更新dp[i],再用dp[i] * dp[s^i]求出最大值#include <iostream>#include <cstdio>#include <algorithm>#include <cstrin

2016-05-15 21:34:52 332

原创 POJ-2533 Longest Ordered Subsequence(二分)

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;int num[1005], ans[1005];int main(){ int n; while(scanf("%d", &n) == 1){ for(int i = 0; i

2016-05-14 15:42:57 343

原创 HDOJ-2686 Matrix

多线程dp, 两个人同时从起点出发,沿着不相交的路径到达终点,获得的最大value。用dp[i][j][h]表示两个人都用了i步,一个人走到了j行,一个人走到了h行获得的最大value. 状态转移方程;dp[i][j][h] = max(max(dp[i-1][j-1][h], dp[i-1][j-1][h-1]), max(dp[i-1[j][h], dp[i-1][j][h-1]) + d;

2016-05-10 20:01:19 211

原创 HDOJ-2665 Kth number(主席树)

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define maxn 100005using namespace std;typedef long long ll;struct Node{ int ls, rs, sum;}p[maxn*20];int a[maxn], b

2016-05-09 23:02:01 784

原创 POJ-2528 Mayor's posters(线段树+离散化)

这道题主要是把所有坐标记录在数组里,排序,去重,把每个数和1-N进行一 一对应也就是离散化。不过有个问题是,这样做后1-10 1-4 6-10这组数据会出现错误。解决办法是在离散化后的数组中,若相邻两个数相差大于1,就在其中插入一个介于他们俩之间的数。#include <iostream>#include <cstdio>#include <algorithm>#include <vector

2016-05-05 20:13:13 204

原创 POJ2631-Roads in the North(树的最长路径)

随便找一个点u,用DFS求出u的最远结点v,然后再利用一次DFS求出v的最远结点w,则v-w就是最长路径.#include <iostream>#include <cstdio>#include <vector>#include <algorithm> #define maxn 10010using namespace std;typedef long long ll;struct No

2016-05-05 13:59:19 388

原创 HDOJ-5677 ztr loves substring

用manacher 求出每个串的所有字串长度,然后把每个子串当作物品,费用为长度,和个数,就可以当作二维费用的多重背包来解。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define maxn 100005using namespace std;bool dp[105][105]; i

2016-05-01 16:23:16 352

空空如也

空空如也

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

TA关注的人

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