![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题ing~
文章平均质量分 71
limchiang
这个作者很懒,什么都没留下…
展开
-
DP经典题
http://poj.org/problem?id=1160题意:有N个村庄,要在这N个村庄中建K个邮局,求如何布置这些邮局能使得所有村庄到离它最近的那个邮局的距离总和最小。此题个人认为与最长递增子序列有一定的类似,我正是受了最长递增子序列解题方法的启发,才A出了此题,但貌似不能通过优化最长递增子序列的方法(nlgn)来优化它///////v个村庄,p个邮局,把邮局建在哪些村庄原创 2012-11-11 15:47:04 · 277 阅读 · 0 评论 -
POJ 1159 Palindrome 之解法三 LCS (最长公共子序列)
题目链接题意:给定一个长度为N(3 )的字符串,只用插入字符这种操作,问要使其变成回文字符串,最少需多少步的插入?思路:找出所给字符串中最大的回文子序列长度L,N - L即为答案。L = 所给字符串和其逆序串的LCS。LCS 背景:LCS(Longest Common Subsequences)最长公共子序列用一般的动态规划时间复杂度O(N^2), 但经过优化可以达到O(NlogN原创 2013-02-18 14:20:02 · 305 阅读 · 0 评论 -
POJ 1837 Balance
题目链接题意:一个杠杆,有多个钩子,每个钩子可以挂多个砝码,现在给出钩子距离中心点的位置坐标以及各个砝码的重量,问在将所有砝码都用上的前提下,使这一杠杆平衡的方法有多少种?思路:多重背包,dp[i][j]数组中存储的是到第 i 个砝码位置平衡度为 j 的方法有几种#include#include #include using namespace std;////砝码个数G原创 2013-02-14 15:41:47 · 202 阅读 · 0 评论 -
poj 1094 之解法二 拓扑排序
题目链接题意:给出大于等于 A 小于 A + n 的字母间的大小关系式,问是否能确定 n个字母的大小关系?如能,在第几个关系式时能确定?如不能,是否出现了矛盾,在第几个关系式时出现了矛盾?关系式举例如下:A<BA<CB<CC<DB<DA#include#include #include #includeusing namespace std;int原创 2013-02-10 16:07:45 · 220 阅读 · 0 评论 -
POJ 1836 Alignment
题目链接题意:一个n (2 个人组成的队伍,给出每个人的身高 在[0.5, 2.5] 之间,现要使每个人都能看到左右至少一端的尽头,问至少需要去掉多少人?思路:枚举剩下的队列中的最高的人的位置,在这一最高的人的左边必定是按身高递增排列的人,在它的右边则必定是按身高递减排列的人,故只需求一次LIS,一次LDS即可。#include#include #include using name原创 2013-02-16 13:06:39 · 230 阅读 · 0 评论 -
基于枚举的贪心
http://poj.org/problem?id=1042有若干个岛屿,每个岛只和前一个岛有路径相连,路径的长度为 ti 个5 分钟的路程,且该路径是单向的,每个岛上都可以钓鱼,岛 i 初始的 5 分钟能钓到的鱼量为 di , 此后的鱼量以每 5 分钟 di 的速度减少,现在从第一个岛开始,问怎样选择停留的方式,才能使在 h 小时内钓到的鱼量最多?思路一:动态规划分组背包问题(详见背原创 2012-12-21 16:43:30 · 239 阅读 · 0 评论 -
拉链法解决冲突的哈希表
http://poj.org/problem?id=3349题目描述:找是否有两片完全相同的雪花,雪花总数为 0 n ≤ 100000,判断两片雪花是否相同的标准为其中一片雪花的的六角数组经过向左(右)循环移位后与另一片的六角数组相同下述方法的一个改进是用空间换取时间,即将雪花的六角存储两份在一个 size 为 12 的数组中,判断另一片要雪花数组是否在其中,然后将两一片雪花数组逆序,原创 2013-01-21 19:43:35 · 1660 阅读 · 0 评论 -
开放定址法解决冲突的哈希表
http://poj.org/problem?id=3349题目描述:找是否有两片完全相同的雪花,雪花总数为 0 n ≤ 100000,判断两片雪花是否相同的标准为其中一片雪花的的六角数组经过向左(右)循环移位后与另一片的六角数组相同#pragma warning (disable:4786) #include #include#includeusing namespace原创 2013-01-22 20:10:19 · 819 阅读 · 0 评论 -
poj 1094 之解法一 传递闭包
题目链接题意:给出大于等于 A 小于 A + n 的字母间的大小关系式,问是否能确定 n个字母的大小关系?如能,在第几个关系式时能确定?如不能,是否出现了矛盾,在第几个关系式时出现了矛盾?关系式举例如下:A<BA<CB<CC<DB<DA#include#include #include #includeusing namespace std;int n;原创 2013-02-09 13:32:47 · 234 阅读 · 0 评论 -
poj 1426 之解三 动态规划
题目链接题意:给定一个数 n (1 解题思路:dp[ i ] [ j ] 表示 数列 1,10,100,1000,10000,......的前 i 个数任意组合得到的和是否有模 n 是 j的数,若有,将此数中最小的存在dp[i][j]中。#pragma warning (disable:4786) #include#includeusing nam原创 2013-02-07 20:51:13 · 205 阅读 · 0 评论 -
POJ 1159 Palindrome 之解法一 记忆化搜索
题目链接题意:给定一个长度为N(3 )的字符串,只用插入字符这种操作,问要使其变成回文字符串,最少需多少步的插入?#include#include#includeusing namespace std;#define MAX 5000#define min( x, y ) ( x < y ? x : y )short int dp[MAX + 5][MAX + 5];原创 2013-02-18 13:37:06 · 220 阅读 · 0 评论 -
POJ 1159 Palindrome 之解法二 DP
题目链接题意:给定一个长度为N(3 )的字符串,只用插入字符这种操作,问要使其变成回文字符串,最少需多少步的插入?#include#include#includeusing namespace std;#define MAX 5000#define min( x, y ) ( x < y ? x : y )int dp[2][MAX + 5]; //滚动数组c原创 2013-02-18 14:04:35 · 203 阅读 · 0 评论 -
poj 3613 最短路变形( 恰好经过 k 条边的最短路 )
题目链接题意:牛牛接力赛,共有 N (2 ≤ N ≤ 1,000,000) 头牛,T (2 ≤ T ≤ 100) 条连接两个路口的无向边,每个路口可以有多头牛,给定起点 s 和终点 e ,问每头牛都只跑一条无向边的最短路长度是多少?思路:先计算分别从起点和终点到各点经过k ( 0 简单证明:虽然枚举重复边的时候剩余的边数一定要是奇数,可能有时候并不能在最短的边上来回走然后退出,原创 2013-03-04 15:57:29 · 546 阅读 · 0 评论 -
poj 1170 二解 之 六进制状态压缩DP
题目链接题意“:有 b种商品 (0 用压缩状态表示商品的数量#include#include#includeusing namespace std;/** 一共有五种商品 */#define nMAX 6/** 六进制基数数组,用六进制是因为每种商品的个数在0 ~ 5 */const int base[5] = { 1, 6, 36, 216, 1296 }原创 2013-03-01 21:51:33 · 272 阅读 · 0 评论 -
poj 3463 最短路数目+次短路数目
http://poj.org/problem?id=3463题目大意:求源点S到终点T的最短路的数量和比最短路长1的数量。解题思路:我们可以利用dijstra算法的思想,只需在其中进行一些改进即可。可以先定义一个二维的数组dist[N][2]。dist[i][0]代表源点S到点i的最短路,dist[i][1]代表源点S到点i的次短路。初始化dist[S][0]=0,其余的都初始原创 2012-10-12 22:21:16 · 685 阅读 · 0 评论 -
poj 1170 二解 之 背包
题目链接题意“:有 b种商品 (0 c(1 , k(1 , p (1 (0 (1 c(编码),k(需购买数量)两个属性,最后是买这个方案中的所有商品给定的数量需要的总价格。问怎样选择优惠方案能最省钱?#include#include#includeusing namespace std;#define nMAX 6 /** 五维数组dp表示五种(或小于五种)商品各原创 2013-03-01 21:14:03 · 272 阅读 · 0 评论 -
poj 2411 & 编程之美 4.2 瓷砖覆盖地板
题目链接题意:用 1 * 2 的瓷砖覆盖 n * m 的地板,问共有多少种覆盖方式? 思路:用2进制的01表示不放还是放,第i行只和i-1行有关,枚举i-1行的每个状态,推出由此状态能达到的i行状态:如果i-1行的出发状态某处未放,必然要在i行放一个竖的方块,所以我对上一行状态按位取反之后的状态就是放置了竖方块的状态。然后用dfs搜索在i行放横着的方块的所有可能,并且把这些状态累加上i-原创 2013-02-27 22:00:32 · 3046 阅读 · 2 评论 -
poj 1185 炮兵阵地
题目链接题意:在N*M的网格地图上部署炮兵部队。地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域。炮兵的攻击范围不受地形的影响。原创 2013-02-27 14:39:44 · 942 阅读 · 2 评论 -
状态压缩DP 第一题
题目链接题意:一块 m * n 的土地 (1 ≤ m ≤ 12; 1 ≤ n ≤ 12),给出其每个方块的贫瘠情况,现要在其上栽种玉米,要求任何两块栽种玉米的地方不能有相邻的边,问玉米的栽种方法一共有几种(一块地都不栽种也属于方法的一种)?#include#include#includeusing namespace std;#define INF 2048#defin原创 2013-02-24 15:45:06 · 257 阅读 · 0 评论 -
POJ 1260 Pearls 解析
题目链接题意:有 c (1错误思路:贪心。从等级最低的开始,判断将其全部用高1等的珍珠来替代是否划算,是则替换并接着试着向上合并,不是则购买这一等级的珍珠。//num[i] 表示需购买的第i等级的珍珠的数量//price[i] 表示每颗第i等级的珍珠的价格// c 表示总的等级数 for( i = 1; i < c; i ++ ){ if( ( num[i] + 10 )原创 2013-02-22 15:03:05 · 408 阅读 · 0 评论 -
水题练Dijkstra的堆优化
http://acm.hdu.edu.cn/showproblem.php?pid=2544#pragma warning (disable:4786) #include#includeusing namespace std;#define INF 0x3F3F3F3Fstruct Edge{ int v; int dis;};int n,m;int di原创 2012-10-10 19:32:05 · 536 阅读 · 0 评论 -
输出最短路路径
http://acm.hdu.edu.cn/showproblem.php?pid=1385#include #include #define MAX 1000using namespace std;int map[MAX+10][MAX+10]; //map[i][j]表示从i到j路上的花费int tax[MAX+10]; //每个城市的过路费int原创 2012-11-08 21:54:48 · 384 阅读 · 0 评论 -
POJ 1426 之解四 DFS
题目链接题意:给定一个数 n (1 解题思路: p * 10 和 p * 10 + 1 两条分支,包含剪枝优化#include#include #include int s=0; int mod[201];using namespace std;void DFS(__int64 p,int n,int k){ ////DFS终止条件 i原创 2013-02-07 21:20:24 · 223 阅读 · 0 评论 -
poj 1426 之解一 BFS
题目链接题意:给定一个数 n (1 解题思路:BFS (从 1 开始 对每个数的 * 10 和 * 10 +1入队)下面的代码可以这样优化:通过设置一个mod[201] 数组记录已入过队的数模 n 的值,其余模相同的数就可以不再入队。#include #include using namespace std;int n;long long bfs(){原创 2013-02-07 20:19:47 · 184 阅读 · 0 评论 -
hoj2037 今年暑假不AC
点击打开链接#include#includeusing namespace std;struct tv{ int begin; //开始时间 int end; //结束时间};bool cmp(tv* a,tv* b){ return a->endend;}int main(){ int n; tv* t[101];原创 2012-10-03 21:04:12 · 237 阅读 · 0 评论 -
最近公共祖先(LCA) Tarjan算法
这里的动画演示可以更好地理解这一算法Tarjan算法是由Robert Tarjan在1979年发现的一种高效的离线算法,也就是说,它要首先读入所有的询问(求一次LCA叫做一次询问),然后并不一定按照原来的顺序处理这些询问,LCA Tarjan算法的用途是处理大量请LCA Tarjan基本框架:先用随便一种数据结构(链表就行),把关于某个点的所有询问标在节点上原创 2012-10-22 21:26:25 · 764 阅读 · 0 评论 -
并查集
http://poj.org/problem?id=1988#pragma warning (disable:4786) #include#includeusing namespace std;int father[30003];int sum[30003];int rank[30003]; //离根节点的距离,可以看成树形人事结构图的职位高低-.-int原创 2012-10-21 21:29:36 · 208 阅读 · 0 评论 -
hdoj 2036
http://acm.hdu.edu.cn/showproblem.php?pid=2036求多边形的面积,可以套用公式,但这里使用递归来解#includeusing namespace std;struct Position{ int x; //x坐标 int y; //y坐标};//叉积int cross(Position p1,Position p2,P原创 2012-10-04 22:35:39 · 65 阅读 · 0 评论 -
hdoj 2112 HDU Today
http://acm.hdu.edu.cn/showproblem.php?pid=2112开始时对map传入了char[ ],wa了很多次。。#pragma warning (disable:4786) #include#include#include using namespace std;#define INF 999999999int visit[155];int原创 2012-10-05 16:48:18 · 278 阅读 · 0 评论 -
hdoj 2036
http://acm.hdu.edu.cn/showproblem.php?pid=2036求多边形的面积,可以套用公式,但这里使用递归来解#includeusing namespace std;struct Position{ int x; //x坐标 int y; //y坐标};//叉积int cross(Position p1,Position p2,P原创 2012-10-04 22:38:10 · 330 阅读 · 0 评论 -
hdoj 2036
http://acm.hdu.edu.cn/showproblem.php?pid=2036求多边形的面积,可以套用公式,但这里使用递归来解#includeusing namespace std;struct Position{ int x; //x坐标 int y; //y坐标};//叉积int cross(Position p1,Position p2,P原创 2012-10-04 22:30:31 · 50 阅读 · 0 评论 -
hdoj 2108 Shape of HDU
http://acm.hdu.edu.cn/showproblem.php?pid=2108叉乘(cross product)2维空间中的叉乘是: P1(x1, y1) X P2(x2, y2) = x1y2 – y1x2对于连续的三个点p0,p1,p2,令向量a=p1-p0,b=p2-p1若是凸多边形,那么b相对于a一定是向逆时针方向旋转的判断两向量的旋转原创 2012-10-04 19:00:22 · 246 阅读 · 0 评论 -
hoj 2034 人见人爱A-B
点击打开链接//杭电oj2034 Text Reverse#include#includeusing namespace std;int binarySearch(int a[],int b,int e,int t){ int mid; if(b<=e){ int mid=(b+e)/2; if(a[mid]==t) return 1; else if(a[mid原创 2012-10-03 15:11:38 · 936 阅读 · 0 评论 -
回溯法
http://acm.hdu.edu.cn/showproblem.php?pid=1045在最多为 4 * 4 的方阵中,圆形代表堡垒,正方形代表墙,堡垒射出的子弹无法穿过墙,求任何两个堡垒都不能射中对方的最大的堡垒放置数?#pragma warning (disable:4786) #include#include#includeusing namespace std原创 2012-12-02 17:08:26 · 207 阅读 · 0 评论 -
N皇后问题 (回溯+打表)
http://acm.hdu.edu.cn/showproblem.php?pid=2553第一种方法,需打表,否则超时#pragma warning (disable:4786) #includeusing namespace std;int used_column[12]; //标记列是否被用过int used_Ldia[102],used_原创 2012-12-03 19:13:37 · 380 阅读 · 0 评论 -
Wooden Sticks
http://acm.hdu.edu.cn/showproblem.php?pid=1051一束待处理木棍,若后面的木棍的长 L 和宽 W 均不小于前一根木棍,则处理机器的不需要启动时间,否则需要1 min (第一根木棍需要1min),问最少需要处理时间?#pragma warning (disable:4786) #include#includeusing namespace s原创 2012-12-06 19:36:18 · 183 阅读 · 0 评论 -
广度搜索入门
题目链接题意:给定坐标上的两个点 N (0 ≤ N ≤ 100,000),K (0 ≤ K ≤ 100,000),问从 N 出发每次采取三种走法之一( N-1; N + 1;N * 2 ),每一步消耗1 min。问消耗的最少时间是多少?#pragma warning (disable:4786) #include#includeusing namespace std;原创 2013-02-05 14:19:24 · 188 阅读 · 0 评论 -
POJ 1088 之二解
题目链接题意:矩形滑雪区域中有各个点的高度,规定只能从高处滑向地处,问最长的滑行路线长度。 比如上面的区域最长路线为 25-24-23-...-3-2-1,长度为25,故应输出25。解法一: DFS + 记忆化搜索#include#includeusing namespace std;#define MAX 100int arr[MAX + 5]原创 2013-02-02 21:39:43 · 215 阅读 · 0 评论 -
哈弗曼树
http://poj.org/problem?id=3253一根木棍,要切出相应长度的几段木条,每次切需要的费用是当前木棍的长度,问怎样切才能使费用最少?比如:长度为13的木棍,要切出长度分别为 2, 3, 4, 4 的木条,最省钱的方法是先切成 5, 8 两段,然后 5 切成 2,3 两段,8 切成 4, 4 两段,这样总费用为 13 + 5 + 8 = 26思路:考虑切过程的逆过程原创 2012-12-19 19:45:53 · 283 阅读 · 0 评论 -
二分图的最大匹配之变形
http://poj.org/problem?id=3020题意:如下图 h * w 的矩阵(1 ), 能横向和竖向地覆盖相邻两个圆点的椭圆,问给定圆点的个数和位置,能覆盖这些圆点的最小椭圆数?分析:将此矩阵中的圆点坐标转换成 1—— h * w 的一维坐标,若一个圆点的正上、正下、左、右方有圆点,则连一条双向边,构造一个图,找到此图的最大匹配原创 2013-01-01 15:34:34 · 312 阅读 · 0 评论