自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

KIJamesQi的博客

大神养成中。

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

原创 uva10250 The Other Two Trees

题意:给出正方形的一对点,然后求出另外两个点的坐标。// #pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #include #include #include #include #in

2015-10-30 16:46:09 313

原创 uva1462(Fuzzy Google Suggest)

思路:建立字典树,然后dfs序列。这题的主要难度在于怎么dfs计数的问题,字典树就是次要的难度。如何表示是不变,增加,删除这三种状态?我们可以用一个指示性的指针来指向序列,用x来表示目前还可以增加删除的次数和。然后对于通过某种不变删除增加的组合形式最后到达的末节点表示为2,中间经过的节点表示为1。最后要注意的就是对于当前字符串搜索完之后要把vis数组清空。// #pragma comm

2015-10-30 01:19:13 380

原创 uva111258(String Partition)

题意:题目说的是给定一串数,然后堆砌进行分割,使得每个分割快的值不大于int的最大值,,,然后求所有分割块的最大和。int的最大值也就10位数,那么我们就可以枚举位数,然后递推。d[i]表示以i结尾的最大和,然后往前递推j位数,那么[i,j]的值与dp[i-j]的和再来与dp[i]去最大。// #pragma comment(linker, "/STACK:1024000000,10240

2015-10-28 15:53:51 433

原创 hdu2222(Keywords Search)

思路:题目中有若干个模式川和一个主串,问在主串中出现了几种模式串。显然就是模式串构成AC_Tree(),然后再去匹配主串。因为new 了空间的,所以最后要delete释放。// #pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #

2015-10-28 14:20:43 411

原创 uva10154

思路:首先要对乌龟的力量从小到大排序。于是dp[i, j]表示前i只乌龟叠j层所能达到的最小体重,不能叠j层则用INT_MAX表示。有了这个转移方程的定义,问题一下子就变得明朗了,只能感叹自己关于动归的思路还是不够成熟。不知道如何变相思考问题。dp[i, j] = min(dp[i-1, j], dp[i-1, j-1] + wi); 前提是i可以承载i-1// #

2015-10-27 00:54:18 418

原创 uva11129

思路:分治。// #pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #include #include #include #include #include #include #in

2015-10-27 00:49:32 421

原创 uva10310(SuperSale)

思路:题目的意思就是有n种物品,m个人,每种物品有对应的价值和重量,数量无限,,但是每种物品每个人只能拿一次,然后每个人有一个最高承重值,问最后这n个人最多可以带走的价值和事多少;显然对于个人而言,别人拿多少对自己是没有影响的,所以就只讨论每个人的情况,最后加起来就好了。对于每个人来说就是一个01背包问题,与处理下就好了。// #pragma comment(linker, "/STA

2015-10-27 00:00:08 429

原创 uva10201(Adventures in Moving - Part IV)

思路:一个人要搬家,rent了一辆车,车的油箱是200L的,开始里面有100L的有,从出发地到目的地的路上有一些加油站,距离出发地dis,油价为val,问从出发地到目的地最少的花费是多少,而且要求如果可以到达,油箱中还必须要有100L的剩余油料,如果不能到达或者剩余100L的油料的话输出Impossible。dp的状态就是在第i个加油站拥有油量j的最小花费,其实对于油料的来源无非就是本站加的,

2015-10-23 10:53:44 364

原创 uva10720(Graph Construction)贪心+havel定理

思路:这题主要就是运用havel定理进行贪心,判断一个序列是否可图化。// #pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #include #include #include #inc

2015-10-23 10:07:08 472

原创 fzu2038 Another Postman Problem

思路:状态应该被狗日了,,,sum没有请0等错误然后wa了9发因为这个是树,而且没有森林,所以呢,只需要求出每条边两端的点数,然后经过这条边的次数就等于两边点数的乘积,此时因为是有方向的左到右,右到左,所以要double下。还有就是福大是win环境,要用I64d输出LL。// #pragma comment(linker, "/STACK:1024000000,1024000000")

2015-10-20 17:03:01 314

原创 uva1292(基础树形dp)

思路:题目的意思是,游一棵树或者是森林,然后要在某些节点上放置一个警察来防卫,然后每个警察呢只能防卫到自己所在节点和相邻的节点,求所有节点都在直接或间接被防卫的时候需要的最少警察数目。意思显然,然后就是dp了;对于当前节点的决策是选与不选,dp[i][j],表示第i个节点的是否直接放置警察;初始化是dp[i][1]=1;dp[u][1] += min(dp[v][1],dp[v][0]

2015-10-20 00:22:10 454

原创 uva10410(树还原BFS)

思路:根据一棵树的先序和中序还原整棵树,记录每个节点的儿子节点,然后打印出来。此类题目是比较典型的树还原的考点。不同与二叉树的是,这个可能是多叉树,不能像二叉树那样简单的进行儿子节点的判断。// #pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #i

2015-10-20 00:18:08 643

原创 uva1612(直接根据题意贪心)

思路:三门分数,然后就是8种组合,先预处理出来每种组合,然后就是根据题意去贪心了,,,然前面的分数在满足条件的情况下尽量高。/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :******************************

2015-10-19 17:46:59 726

原创 uva1025(基础dp)

思路:先要与处理出来每辆列车经过每个站点的时间方向。再然后就是一通模拟了。/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :*****************************************/// #pragma c

2015-10-19 17:45:28 374

原创 uva1220(基础树形dp)

思路:这题很容易想到状态,就是当前节点u选与不选,其某子节点v。那么dp[i][j]其中i为节点编号,j表示为选(1)与不选(0)。显然:选u,dp[u][1] += dp[v][0],再就是唯一性的判定。不选u,dp[u][0] += max(dp[v][1],dp[v][0]),再就是唯一性的判定。走到叶子节点时,dp[v][0] = 0,dp[v][1] = 1,/***

2015-10-19 17:39:02 516

原创 uva10453(回文串dp)

/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :*****************************************/// #pragma comment(linker, "/STACK:1024000000,10240

2015-10-19 17:30:26 418

原创 uva122(二叉树建立,中序遍历)

思路:建立二叉树,BFS。/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :*****************************************/// #pragma comment(linker, "/STACK:1

2015-10-19 17:26:28 524

原创 uva10739(String to Palindrome)

思路:题目说的是给定一个字符串,然后可以对每个字符修改一次,问最少需要修改多少吃可以使得字符串变成回文字符串。这题的状态显然是很好像的dp[i][j]表示区间[i,j]的字符串修改成回文的需要修改的最少次数,然后就是转移方程了。1,s[i] = s[j],dp[i][j] = dp[i + 1][j - 1];2, s[i] != s[j],显然此事需要修改一次,看是修改s[i]还是修改s

2015-10-18 17:09:58 436

原创 hdu3416(SAP网络流)

思路:这天显然是要求从最短路走,然后就是问在边不重复走的情况下,有多少条从源点到汇点的路径,由于边不重复,所以就是每条边的可行流量为1,接下来就是网络流的问题了。但是由于开始不会SAP只会写DINIC,所以TLE了一天,最后学了下下SAP,,,勉强给过了这题,,,还是太弱了QWQ!!!/*****************************************Author

2015-10-16 22:29:09 597

原创 hdu2883(DINIC最大流)

思路:同hdu3572一样的模型。有n个客人,没人点了ni个烤肉串,其中没串需要ti的时间来烤熟,但是可以不是连续的ti时间,只要烤得时间加起来有ti就好了,与3752不同的是时间范围有点大,需要离散化一下,所以变成了区间。对起始时间排序去重,那么可以得到top个时间点,也就是top个区间,那么对于每个客人的时间要求,只要客人的要求[s,e] 完全包含了第i个区间,那么该客人与这个区间连边,容量i

2015-10-14 17:54:04 390

原创 hdu3572(DINIC最大流)

思路:n个任务,m台机器,每个任务有起止时间,和需要的时间,每个机器同一段时间内只能执行一个任务,一个任务在同一时间内只能被同一机器执行,中途可被打断;每天每台机器是能完成一天的工作量,把这个工作量作为流量比较合理。题目中有三个量,时间,机器,任务。根据题意,每天我m台机器可以完成m天的任务量,所以图中只需要有任务,时间即可。源点和任务连边,容量p,任务和对应的时间连边,容量1,时间和汇点

2015-10-14 16:29:26 474

原创 CSU1613 Elephants

思路:多重背包;#include #include int t,n,m;int dp[1010],A[21][51],C[21][51],num[21];int max(int x,int y){ return x > y?x:y;}int main(){ // freopen("in.txt","r",stdin); scanf("%d",&t); while(t--

2015-10-10 18:16:25 385

原创 hdu2126(三维背包)

思路:显然的思路是前i个物品选j个花费k元的次数。dp[i][j][k] = dp[i - 1][j][k] + dp[i - 1][j - 1][k - v[i]];由上面的转移方程可以看出来,可以去掉一维,就是dp[j][k] = dp[j - 1][k - v[i]] + dp[j][k];/*****************************************Au

2015-10-06 20:43:26 440

原创 hdu4501(三维背包)

思路:dp[i][j][k],第一维表示用钱买,第二维表示用积分换,第三维表示免费的。对于每个商品而言,要么用钱,要么用积分,要么用免费的次数。所以呢,dp[i][j][k] = max(dp[i - a[s]][j][k],dp[i][j - b[s]][k],dp[i][j][k - 1]) + v[s];这个是对于地s个物品而言的。/*************************

2015-10-06 20:36:15 558

原创 uva1329 Corporative Network

思路:并查集维护,多一个d数组来表示与当前根节点的关系;/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :*****************************************/// #pragma comment(li

2015-10-06 12:52:03 412

原创 uva608(枚举)

思路:有12个硬币,其中有一个是假的,与真的不同之处是其重量;那么我们就可以枚举假的,然后再枚举假的事比真的重还是轻,然后就根据三个已知情况去判断这个假设是否正确;/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :**********

2015-10-06 12:28:56 344

原创 LA3902 Network

思路:无向树转成有向树,dfs;然后就是k距离染色标记;/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :*****************************************/// #pragma comment(li

2015-10-05 22:26:59 319

原创 poj11195(二维树状数组)

思路:二为梳妆数组模版;题目给的操作就两个,更新区间值,区间求和;c[i][j]表示左上标为(0,0)右下标为(i,j)的正方形区间的和sum(i,j);明白sum(i,j)的意思之后呢,就知道中间某块矩形的和该怎么求了,可以参考下图;(1,2,3,4)的和 - (1,3)的和 - (1,2)的和 + (1)的和 = (4)的和;/*********************

2015-10-05 20:17:17 357

原创 hdu2578(sort + 二分)

思路:先sort一下,,,要找a + b = k,那么就枚举a二分查找b,然后就是判重;点击题目链接/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :找两个数,a + b = k,枚举a,二分查找b;*************

2015-10-05 18:44:04 470

原创 lightoj1135(线段树 + 延迟标记)

思路:题目就是0 ~ n - 1个数,m次操作,往区间添加1或者查询区间有多少个可以被3整除的数;被三整除的余数就是0,1,2。如果添加1就变换三个数的值;点击题目链接/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :**

2015-10-03 16:49:26 293

原创 uva10810(求逆序数)

由于num[i]比较大,所以要hash一下;然后就是树状数组的事情了;/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :*****************************************/// #pragma com

2015-10-03 15:51:06 523

原创 hdu4217(求区间k小)

思路:求k小与k大本质上窝觉得是一样的,可以互相转换。http://www.cnblogs.com/wuyiqi/archive/2011/12/25/2301071.html这博客讲的还不错。/*****************************************Author :Crazy_AC(JamesQi)Time :2015File

2015-10-03 14:46:18 443

原创 uva297(四叉树建立)

思路:根据题意,每个字母都是代表一个正方形的方块,那么我们要表示这个正方形就只需要左上角的坐标和宽度,字母'P'表示这个方块里面有黑块,但是不是全部都是,所有要针对这个方块继续递归建树,‘f’表示这个方块全是黑色的,那么就可以开始统计数目了。‘e’就直接忽略丢就好了。点击题目链接/*****************************************Author

2015-10-03 13:57:50 554

原创 uva699(根据先序还原树)

思路:建立一个数组,从中间位置开始建树做记录,往左子树走就左加,往右子树走就右加;点击题目链接/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :*****************************************

2015-10-03 12:51:38 474

原创 uva548

思路:题目的意思是找一条从根节点到叶子节点的路径,从所有路径中找一条路径节点和最小的路径,并输出该路径的最后一个节点的值;模拟二叉树还原,记录前面的值,到达叶子节点的时候比较下就好了。点击题目链接/*****************************************Author :Crazy_AC(JamesQi)Time :2015Fi

2015-10-03 12:32:25 632

原创 uva536(先序 + 中序输出后序)

点击题目链接/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :*****************************************/// #pragma comment(linker, "/STACK:10240000

2015-10-03 11:59:53 474

原创 uva784(直接bfs)easy

思路:题目很好理解,输出一个地图。’X‘代表墙,如果有*的地方,就往四面八方扩散,能到的地方就变成’#‘。题意:直接搜索地图,走过的点变成’#‘即可#include #include int dx[] = {-1,0,1,0};int dy[] = {0,-1,0,1};char mp[40][85];int a,b;int tot;int find(){ for (i

2015-10-02 23:12:15 486

原创 uva532(三维简单宽度优先搜索)

简单不解释。。。/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :*****************************************/// #pragma comment(linker, "/STACK:102400

2015-10-02 23:09:21 608

原创 uva11324(tarjan缩点 + DAG图上的简单dp)

思路:先缩点,再构图,最后dp。dp[u] = max(dp[u],dfs(v) + val[u]);#include #include #include #include #include using namespace std;const int maxn = 1e3 + 10;int low[maxn],pre[maxn],sccno[maxn];int scc_cnt,

2015-10-02 14:03:07 1236

原创 uva12167等价性证明

思路:根据题目的意思,a,b,c,d等命题等价就是在推导(逻辑)上可以相互推导出对方,如a->b->c->d->a显然此时可以相互推导出来,把这个放到图上来看就是一个强连通分量,题目问的是最少还需要添加几个关系可以是的图为一个等价图 == 强连通图;那么我们就先把已经可以相互推导出来的点缩成一个点,然后就是一个DAG图了,加下来就是看入度为0的点与出度为0 的点的个数了,注意原图已经连通的

2015-10-02 12:11:51 454

空空如也

空空如也

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

TA关注的人

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