数据结构
cnyali_lily
这个作者很懒,什么都没留下…
展开
-
NOIP提高组2013 火柴排队
题目:题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示第一列火柴中第 i 个火柴的高度,bi 表示第二列火柴中第 i 个火柴的高度。 每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距原创 2016-07-05 16:13:05 · 311 阅读 · 0 评论 -
POJ3345 Bribing FIPA(树形DP)
题目大意: 一个国家想贿赂至少m个国家,给出贿赂每个国家需要的钱及他们的附属关系。如果贿赂了主国,其附属国家也同样视为被贿赂了,且保证关系网没环,和一个国家最多只能被一个国家控制。题目思路:本题要用到树形背包和字符串处理,字符串用普通方法读入特别麻烦且代码繁琐。这里我第一次用到了map:#include<iostream>#include<cstdio>#include<cstdlib>原创 2016-06-15 09:33:31 · 468 阅读 · 0 评论 -
POJ1463 Strategic game(树形DP)
题目大意: 有一棵树,要求找到最少放几个士兵才能将所有点都看守到,每个节点的士兵只能看守临近一个的节点。题目思路:树形DP:#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;int d[1505][2],c[1505],to1[3010],next1[3010原创 2016-06-11 16:03:58 · 365 阅读 · 0 评论 -
POJ3630 Phone List(字典树)
题目大意: 输入n个电话号码,如果一个电话号码是另一个的前缀输出”NO”否则输出”YES”题目思路:本题要用到字典树的插入和查询:#include<cstdio>#include<cstring>struct node{//定义结构体 int sum,n[10],e; node(){ sum=0; memset(n,0,sizeof(n));原创 2016-06-16 11:48:21 · 409 阅读 · 0 评论 -
合并果子(堆写法)
题目大意: 一个小朋友从树上打下了几堆果子。要将所有果子合并成一堆。给出没堆果子的重量求最小力气本题的思路是要将重量最小的先合并,也就是传说中的哈夫曼树!但本题的数据比较大。今天我们来看堆得写法:# include<stdio.h># include<stdlib.h>long long a[1000010];int main(){ long long sum=0,ans=0,n原创 2016-05-30 10:52:03 · 3193 阅读 · 1 评论 -
POJ 1611 The Suspects( 并查集)
题目: 严重急性呼吸系统综合症( SARS), 一种原因不明的非典型性肺炎,从2003年3月中旬开始被认为是全球威胁。为了减少传播给别人的机会, 最好的策略是隔离可能的患者。 在Not-Spreading-Your-Sickness大学( NSYSU), 有许多学生团体。同一组的学生经常彼此相通,一个学生可以同时加入几个小组。为了防止非典的传播,NSYSU收集了所有学生团体的成员名单。他们的标准原创 2016-05-31 14:26:15 · 503 阅读 · 0 评论 -
POJ2352 Stars(树状数组)
题目大意: 给出n个y坐标递减的星星坐标,每个星星都有一个一个等级是这颗星星下边和右边的星星总数(水平垂直也算)。大体思路:用树状数组统计处在下边和左边的星星总数,下边不用算,因为y坐标递减。只要算在第i可星星前输入的有多少颗x坐标小于当前:# include<stdio.h># include<stdlib.h>int a[1000000],p[10000000];int lily3(原创 2016-06-01 11:50:05 · 325 阅读 · 0 评论 -
POJ3264 Balanced Lineup(线段树静态)
题目大意: 一位农夫有n头牛,给出每头牛的身高。求q个范围内的牛中最高的和最矮的身高差。思路:线段树求一个序列中的最大值和最小值:# include<stdio.h># include<stdlib.h># include<algorithm>using namespace std;int a[10000000],x,y;struct node{ int b,e,s,c;}原创 2016-06-02 11:13:59 · 285 阅读 · 0 评论 -
POJ2155 Matrix(二维线段树)
题目大意: 有一个n*n的由零组成的矩阵,给定q个操作,C为将x1y1为左下角,x2y2为右下角的矩阵取反值。Q为输出xy的的0,1状态。思路:二维线段树的建造和访问:# include<stdio.h># include<stdlib.h># include<string.h>int a[4010][4010],n,m,ans;char s[1000];void buildy(in原创 2016-06-03 10:56:22 · 269 阅读 · 0 评论 -
合并果子(优先队列)
#include<bits/stdc++.h>using namespace std;int n,i,m,k,s;int main(){ priority_queue<int>q; cin>>n; for(i=1;i<=n;i++){ cin>>m; q.push(-m); } while(q.size()-1){转载 2016-06-03 14:11:54 · 439 阅读 · 0 评论 -
POJ2486 apple tree(树形DP)
题目大意: 给出一个有n个节点的树,每个节点上有个权值,问不超过k步最多能遍历到的权值。 输入: 输入n和k,然后是n个节点的值,然后是n-1个i j代表了i和j节点相邻。 输出:最多能遍历到的权值。思路:树形dp:d[0][x][j+2] = max(d[0][x][j+2],d[0][v][k]+d[0][x][j-k]); d原创 2016-06-11 12:35:41 · 394 阅读 · 0 评论 -
HDU1561 The more, The Better(树形DP)
题目: ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物。但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。你能帮ACboy算出要获得尽量多的宝物应该攻克哪M个城堡吗? 思路:树形DP:#include<iostream>#include<cstdio>#inclu原创 2016-06-11 14:25:25 · 355 阅读 · 0 评论 -
POJ3342 Party at Hali-Bula(树形DP)
题目大意: 有n个人要一起聚会,规定直接上司不能和他的直接下属一起出席。问最多能去几人是唯一解吗?题目思路:树形DP+链试前向星:#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>int to1[210],begin1[210],next1[210],d[210][2],u[210][2],e;ch原创 2016-06-13 08:55:52 · 347 阅读 · 0 评论 -
POJ3254 Corn Fields(状态DP)
题目大意: 给出一个M*N的矩阵,元素为0表示这个地方不能种玉米,为1表示这个地方能种玉米,现在规定所种的玉米不能相邻,即每行或者没列不能有相邻的玉米,问一共有多少种种植方法。思路状态DP:#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>int d[13][8192],p[8192],s[8192]原创 2016-06-14 10:41:08 · 279 阅读 · 0 评论 -
POJ3283 Card Hands(字典树)
题目大意: 给定n副牌计算一共有几张牌出现,如果前缀或后缀相同则此前缀或此后缀上的牌只计算一次。题目思路:本题要用到字典树,并且将不同的牌用花色编号*13+牌号来记:#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>int ans=0,p,n;int a[100000][100];char s[4原创 2016-06-17 14:14:10 · 591 阅读 · 0 评论 -
POJ 2352 Stars(treap)
题目大意: 给出n个y坐标递减的星星坐标,每个星星都有一个一个等级是这颗星星下边和右边的星星总数(水平垂直也算),求每个星星的等级。题目思路: 用2叉树统计星星个数,treap优化,下边不用算:#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>using namespace std;struct n原创 2016-08-17 13:23:50 · 332 阅读 · 0 评论