
poj
kdzc
中科院程序员一枚,研究僧在读中,主要方向压缩感知,图像处理,和大家一起学习进步^_^
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
poj 动态规划DP - 1157 LITTLE SHOP OF FLOWERS
这里有一份DP题目列表点击打开链接,大家想专门刷DP的可以看一下。我们有不同的花和花瓶,每束花在不同的花瓶里有不同的价值,最后找出价值最大的放花顺序。动态规划最重要的是找出递推式,我们将每束花在不同花瓶的价值放在data[i][j]里,map[i][j]表示第i束花插在第1-j号花瓶中全局最大的价值,递推式为:map[i][j] = max(map[i-1][j-1]+data[i][原创 2015-04-26 18:38:22 · 542 阅读 · 0 评论 -
poj 杂题 - 2081 Recaman's Sequence
这道题目一开始就能知道考点在如何缩短查找时间。所以加快查找是我们的重点。但是在大数据面前,查找算法都不够快,所以我们用简单的hash思想来做。我们开一个数组a,当出现了一个数b时,把该数作为下标调整值,即a[b] = -1,下一次出现该值的时候直接去找这个值作为下标的a值是否为-1即可。#include#include#define MAX 5000010int p[MAX]={0}原创 2015-05-11 15:38:38 · 761 阅读 · 0 评论 -
poj 动态规划DP - 2533 Longest Ordered Subsequence
动态规划经典题:最长上升子序列。 假如我们考虑求A[1],A[2],…,A[i]的最长非降子序列的长度,其中i为了方便理解我们是如何找到状态转移方程的,我先把下面的例子提到前面来讲。 如果我们要求的这N个数的序列是:5,3,4,8,6,7根据上面找到的状态,我们可以得到:(下文的最长非降子序列都用LIS表示)前1个数的LIS长度d(1)=1(序列:5)前2原创 2015-04-28 15:00:58 · 709 阅读 · 0 评论 -
poj 动态规划DP - 1664 BUY LOW, BUY LOWER
最大下降子序列,变相的最大上升子序列题目。主要是多了一个判断最大序列的个数。一般递推式是dp[x] = max(dp[x],dp[y]+1),这里多了一个count用来计算序列个数。在内部循环剩下的序列时,我们从尾向头部循环,因为显然,目前最大的下降子序列一般在后面,这样的话,我们能迅速找到最大子序列,并且往前找与这个序列长度相同的结点,计算序列个数。# include#include原创 2015-05-04 14:12:41 · 675 阅读 · 0 评论 -
poj 杂题 - 1013 Counterfeit Dollar
判断硬币题。这道题目没咋知道怎么做,看了其他人的discuss才有了思路。一,EVEN时,两边都是真币二,非EVEN时,没上天平的都是真币三,曾经被认为可能偏重,又出现在偏轻的一方的是真币。我们可以用一个数组zeros存储一定是真币,即出现在even情况内的那些;另一个数组sus存储对可能是假币的怀疑情况,当出现在up时,左边的硬币sus--,右边的++。down时反过来,这样原创 2015-05-04 20:50:52 · 708 阅读 · 0 评论 -
poj 动态规划DP - 1953 World Cup Noise
这一题其实就是斐波那契数列,但是我一开始用的是DP,不过应该思想差不多。一数组dp[i][2],dp[i][0]代表前i个数里面最后一个数字为0的数量,dp[i][1]代表前i个数里面最后一个数字为1的数量,可知dp[i][1]+dp[i][0]就是前i个数能组成序列的数量。这里因为不能2个1在一起,所以:dp[i][0] = dp[i-1][0]+dp[i-1][1]dp[i][原创 2015-05-04 15:23:49 · 831 阅读 · 0 评论 -
poj 杂题 - 1959 Darts
这一题放在杂题里,是因为我没有用DP,而是使用的枚举,当然是受到了discuss里面的启发。因为我们只能有三次机会,每一次只可以是固定的63个数,所以枚举感觉更加直观,但是不知道是不是没有DP快。#include#includeint n;int Darts[63];int main(){ int t,c=1,i,j,k,res; scanf("%d",&t); for(i原创 2015-05-04 18:37:45 · 895 阅读 · 0 评论 -
poj 动态规划DP - 2018 Best Cow Fences
这道题目我一开始的思路是用二维DP,结果TLE了。后来换了个思路,终于AC了。不需要判断所有的情况,我们用dp[i]表示前i个牛圈中最大的牛数,而这个i首先必须>=限制的牛圈树f。用num[i]表示dp[i]中包含了多少牛圈。我们可以知道,dp[i] = sum[i] - sum[i-f])/f or dp[i-1] + data[i], 前一个代表到i为止前f个牛圈的牛数,后一个代表原创 2015-05-05 16:22:36 · 1024 阅读 · 0 评论 -
poj 动态规划DP - 2063 Investment
富二代继承遗产不知道怎么花问题,就是一个完全背包问题。虽然每一年的起始金额不同,但是内容都是一样的,就是在n种债券中随意选择,注意因为为了简化计算和开辟空间,而且题目告诉我们了债券金额是1000倍数,所以我们将金额除1000,每次处理前起始钱数都除1000.完全背包问题:把第i种物品拆成费用为c[i]*2^k、价值为w[i]*2^k的若干件物品,其中k满足c[i]*2^kO(VN)的算原创 2015-05-05 21:27:39 · 725 阅读 · 0 评论 -
poj 杂题 - 1147 Binary codes
N位的二进制串连续N次循环移位,得到N个二进制串。对其按照字典序排列,得到一个N*N的矩阵。告诉矩阵最后一列,求矩阵第一行。拿这个题目例子讲解吧。0 0 0 1 10 0 1 1 00 1 1 0 01 0 0 0 11 1 0 0 0我们看到最后一列是10010,因为是按照字典序排列,也就是0在1前面,那这个每一行的第一个数字肯定是从0到1的,因为是最高位嘛,所以我们将最原创 2015-05-06 18:56:11 · 758 阅读 · 0 评论 -
poj 动态规划DP - 2392 Space Elevator
背包九讲里面的多重背包问题。每一块积木有高度和数量,也有最大能到的高度位置限制。我们DP前首先要对高度限制进行排序,因为从直观角度说,我们也需要先处理较小的能到高度的积木,这样才能取到最大值。例如第一个高度是11,限制高度是100,第二个的限制高度是10,那如果直接处理,第二个不会被处理到。#include#include#include#define max(x,y)(x>y?x:y原创 2015-05-08 09:59:46 · 668 阅读 · 0 评论 -
poj 并查集 - 1308 Is It A Tree?
最近因为保研,在刷一些poj上面的ACM题,发现智商真的是无限被碾压。。。1308 这一道题目考察的是并查集,点击打开链接这位博主对并查集的介绍可谓是很详细易懂了,并的意思就是将两个不同类别的集合合并到一起,类似于两棵树合并;查的意思就是找到这个点所属集合的根节点。并查集的基本模板:int pre[1000 ];int find(int x)原创 2015-04-23 21:34:32 · 475 阅读 · 0 评论 -
poj 杂题 - 1083 Moving Tables
这道题最主要的是看懂题目即可。我们需要算出搬动桌子的最短时间,根据这个图可以知道不同房间占用同一走廊。这道题里1-4,2 -3显然占用同一走廊,但是2-3 和 4-5也占用了房间4和房间3的那个走廊,所以注意这个数据的最短时间是20,不是10。搞清楚这个就好做了,我们可以将房间偶数/2,奇数/2+1,这样2-3变成了1-2,4-5变成了2-3,自然占用了走廊。#include#i原创 2015-05-03 10:27:02 · 745 阅读 · 0 评论 -
poj 动态规划DP - 1664 放苹果
dp[m][n]表示m个苹果放n个盘子里面.此问题可分为两个子问题:当m所以m当m>=n时,可分为两种放法,一种为至少有一个盘子为空,则有dp[m][n-1]种放法。另外为n个盘子都不为空,则先将n个苹果一个一个放入n的盘子中,剩下的m-n个苹果再放入n个盘子中。此放法就相当于m-n个苹果放n个盘子里面,有dp[m-n][n]种放法。所以状态转移方程为dp[i][j]:if(i原创 2015-04-30 19:41:51 · 1528 阅读 · 0 评论 -
poj 动态规划DP - 1609 Tiling Up Blocks
Michael The Kid有n块积木,每块积木左上有l个凸口,右上有w个凸口,左下右l个凹口,右下有w个凹口。当l >= l'并且m >= m'时,木块'可安装于另一个上面。问最高能叠几层积木。我们用dp[i][j]表示i'dp[i][j]=max(dp[i-1][j],max(dp[i][j-1],dp[i-1][j-1])) , 因为最大就是100,所以我们只要输出dp[100][10原创 2015-04-30 15:39:24 · 643 阅读 · 0 评论 -
poj 动态规划DP - 1163 The Triangle
这里有一份DP题目列表点击打开链接,大家想专门刷DP的可以看一下。这是一道经典的DP题,找出从顶到底和最大的路径和。我们先记录每个路径点上面的值map[i][j] ,这道题的递推式是map[i][j] = max(map[i-1][j]+map[i][j],map[i-1][j-1]+map[i][j]); 当然最边缘的路径只有一条,单独考虑。# include# d原创 2015-04-26 22:26:25 · 543 阅读 · 0 评论 -
poj 并查集 - 2524 Ubiquitous Religions
并查集题目,并的意思就是将两个不同类别的集合合并到一起,类似于两棵树合并;查的意思就是找到这个点所属集合的根节点。基本上并查集题目都是在大体架构上面加一些东西即可。每个人都可能有不同的信仰,有n个学生,给出一些line,每个line里的两个人信仰一样,最后判断有n个学生中最多有多少信仰。我们在原本模板上加入一个记录信仰数的变量num,一开始num=n,在合并两个有相同信仰的原创 2015-04-24 20:49:01 · 553 阅读 · 0 评论 -
poj 并查集 - 2236 Wireless Network
并查集题目,点击打开链接这位博主对并查集的介绍可谓是很详细易懂了,并的意思就是将两个不同类别的集合合并到一起,类似于两棵树合并;查的意思就是找到这个点所属集合的根节点。现在n台之间有距离的电脑,只有距离小于d的才能连接,我们需要修复他们,让彼此之间可以互相连接。这一次我们在并查集模板里面加入ranks数组用来记录该节点的修复情况,在union_set时,如果两台机器都修复了而且距离小于d,原创 2015-04-24 19:17:07 · 550 阅读 · 0 评论 -
poj 并查集 - 2492 A Bug's Life
并查集题目,并的意思就是将两个不同类别的集合合并到一起,类似于两棵树合并;查的意思就是找到这个点所属集合的根节点。基本上并查集题目都是在大体架构上面加一些东西即可。这道题目和poj 1703 很相似,bug之间只存在两种状态,男 1 和女 0,所以两个被判断是同性的相恋就可疑了(德国人还挺好玩)。在这里这里在并查集模板里加入一个sex数组,用来说明这一个节点的bug是属于男还是女。我们原创 2015-04-24 20:25:19 · 532 阅读 · 0 评论 -
poj 动态规划DP - 1125 Stockbroker Grapevine
从今天开始刷动态规划类题目,先从简单的开始,这里有一份DP题目列表点击打开链接,大家想专门刷DP的可以看一下。1125题就是一道连通题,股票经纪人之间互传谣言,但是每个人传到其他人的时间不同,求出传播最快的那个人和所需时间。我们可以看出这是一道求最短路径题,所以想起了Floyd算法,由于Floyd算法实现的简单性,所以绝大部分的最短路径题都是由Floyd算法解决的。原创 2015-04-25 19:52:38 · 580 阅读 · 0 评论 -
poj 动态规划DP - 1456 Supermarket
题目大意:每一个商品有自己的价值和保存日期,必须在日期内卖出,要求算出在满足保存日期内所卖出商品的最大价值和。我的做法是,第i件商品在保存日期的每一天内与前i件商品在那天卖出的商品作比较,大于则停止判断,开始判断第i+1件商品。#include#include#include#define max(x,y)(x>y?x:y)#define MAX 10003str原创 2015-04-29 20:45:57 · 526 阅读 · 0 评论 -
poj 并查集 - 1703 Find them, Catch them
并查集题目,点击打开链接这位博主对并查集的介绍可谓是很详细易懂了,并的意思就是将两个不同类别的集合合并到一起,类似于两棵树合并;查的意思就是找到这个点所属集合的根节点。这道题目里里面有两个帮派,我们需要判断抓到的两个罪犯,是否属于一个帮派?D [a] [b] 说明a,b不是一个帮派,A[a][b]时需要判断这两个人是不是一个帮派的。这里在并查集模板里加入一个ranks数组,原创 2015-04-24 13:46:51 · 510 阅读 · 0 评论 -
poj 动态规划DP - 1458 Common Subsequence
最长公共子序列。DP经典题目。两个字符串a与b,dp[i][j]代表在在a的前i个字符与b的前j个字符公共子序列的最大值。当a的第i个字符与b的第j个字符相等时,最大数等于a的前i-1个字符与b的前j-1个字符最大值+1;否则最大数等于max(a的前i-1个字符与b的前j个字符最大值,a的前i个字符与b的前j-1个字符最大值)。# include# include# define原创 2015-04-29 21:28:47 · 554 阅读 · 0 评论 -
poj 模拟 - 1690 (Your)((Term)((Project)))
这一题主要是需要考虑的情况考虑到了即可,我们需要去掉对这个式子无用的括号。把每对括号,满足以下任意一个条件的就可以去掉:1,最外面的括号2,前面不是 减号 的括号3,前面是减号,但左右括号之间仅有变量,而没有 加减号 的括号。我利用栈和数组存储了右括号对应左括号的下标,大家也可以试试其他方法。这里给一个测试数据。5(A-B + C) -原创 2015-05-02 13:27:35 · 587 阅读 · 0 评论 -
poj 大数 - 2602 Superlong sums
这应该算是最简单的大数题了。。。目的就是为了让你知道char的输入输出比int快很多,还学会了getchar(),putchar()。#include#define MAX 1000002char num[MAX],num1[MAX];int main(){ int n,i; scanf("%d",&n); getchar(); for(i=1;i<=n;i++){ num原创 2015-05-09 10:45:12 · 968 阅读 · 1 评论 -
poj 杂题 - 2231 Moo Volume
一开始以为是long long输入,后来发现用int就行,,,反正也是一个挺简单的题目,直接贴代码了。#include#includeint cows[10005]={0};int main(){ int n,i,j; long long res = 0,temp; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&cows[i原创 2015-05-09 09:34:19 · 901 阅读 · 0 评论 -
poj 并查集 - 大体模板
下面是并查集的主要结构代码,即模板:int pa[MAXN]; // 创建集合void make_set(int size) { for(int i=1;i<=size;i++) pa[i] = i;} // 查int find_set(int x) { if(x==pa[x]) return x; pa[x]=find_set(pa[x]); r原创 2015-04-24 20:29:55 · 675 阅读 · 0 评论