- 博客(113)
- 资源 (1)
- 收藏
- 关注
原创 hdu 5052 (LCT)
/*一颗树,有n个点,每个点有一个权值。每次查询 u->v 的路径上(u,v,w) 先取一个点权,在取一个点权,使后者减去前者的值最大(如果为负数,输出0),并且走过这条路径之后,路径上每个点的点权都加上w。*///下面的代码是修改模板之后的,里面有好多函数是没有用到的,与模板有很好的继承性#include #include #include #include #inclu
2014-10-16 18:51:32
617
原创 hdu 5002 (LCT模板)
/*一颗树,有很多操作:(1)删除边x-y,加上边a-b;(2)a->b的路径上的所有点权改为x(包含a,b);(3)a->b的路径上的所有点权加上d(包含a,b);(4)查询a->b的路径上严格第二大的点权,以及它出现的次数(如果所有值都一样大,就输出all same)。*/
2014-10-16 18:35:43
555
原创 hdu 4749 (转化的KMP)
//hdu 4749/*题意:给出两个数列(可以看成串),问最多能在串1中找出几个不重叠的substring,使得这些substring的元素的相对大小关系与串2相同(显然,长度也要与串2相同)。解题思路:kmp。。比赛的时候有想到这个思路,但一直不知道怎么搞定这个相对大小关系。其实很简单。。count(Ai<An+1)=count(Bi<Bn+1),i=1..n count
2014-10-14 18:55:17
485
原创 hdu 4336 状压概率dp
状态压缩求概率dp。 #include#include#include#includeusing namespace std;#define MAX 1<<21double dp[MAX];double p[22];int n;int main(){ int i,j; while(scanf("%d",&n)!=EOF) { fo
2014-09-26 22:33:05
433
原创 hdu 4416 后缀数组
首先参考这个链接的思路,讲的很清晰:http://blog.youkuaiyun.com/dgq8211/article/details/9850577
2014-09-09 23:00:30
395
转载 划分树(基本用法是求给定区间的第k大的值)
划分树,从网上看到的代码的风格主要有两种。下面的介绍直接是从网上找的看的懂的贴了份过来,其中有些修改。划分树的定义 划分树定义为,它的每一个节点保存区间[lft,rht]所有元素,元素顺序与原数组(输入)相同,但是,两个子树的元素为该节点所有元素排序后(rht-lft+1)/2个进入左子树,其余的到右子树,同时维护一个num域,num[i]表示lft->i这个点
2014-09-04 14:07:38
557
原创 hdu 4405 简单概率dp
什么都不多说。推荐一个博客:http://kicd.blog.163.com/blog/static/126961911200910168335852/代码如下:
2014-08-31 16:38:46
405
原创 hdu 4046 树状数组
#include#include#include#include#includeusing namespace std;#define MAX 50555int n,m,T,l,r,k,casei,type;char ch;char str[MAX];int C[MAX],a[MAX],SUM[MAX];void deal(){ int i,j; str[n
2014-08-29 17:07:32
447
原创 hdu 4031 线段树
被攻击的次数等于 总的攻击次数减去成功防守的次数这道题目其实主要考如何计算成功防守的次数 #include#include#include#include#define maxn 22222using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int last[maxn],num[maxn
2014-08-27 21:35:09
429
转载 STL heap 转载
原文出自: http://blog.youkuaiyun.com/morewindows/article/details/6967409 下面再介绍STL中与堆相关的4个函数——建立堆make_heap(),在堆中添加数据push_heap(),在堆中删除数据pop_heap()和堆排序sort_heap():头文件 #include 下面的_First与_Last为可以随
2014-08-25 21:13:07
401
转载 STL 优先队列(队列+栈) 转载
STL之优先队列原本以为priority_queue很简单,才知道原来懂的只是最简单的形式。头文件:#include优先队列,也就是原来我们学过的堆,按照自己定义的优先级出队时。默认情况下底层是以Vector实现的heap。既然是队列,也就只有入队、出队、判空、大小的操作,并不具备查找功能。函数列表:empty() 如果优先队列为空,则返回真 pop() 删除第
2014-08-25 20:24:38
576
转载 STL MAP用法详解
说明:如果你具备一定的C++ template知识,即使你没有接触过STL,这个文章你也应该可能较轻易的看懂。本人水平有限,不当之处,望大家辅正。 一.Map概述 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里
2014-08-25 13:28:30
319
原创 hdoj 4027 线段树
关键就是一个数开根号几次后很快就可以变成1了。如果都是1就不需要往下更新了。 还有就是输入的X,Y大小是不一定的,,这个坑了好久
2014-08-24 14:36:51
440
原创 hdoj 2829 斜率优化DP
又是一道斜率优化DP。设dp[i][j]表示前i点,炸掉j条边的最小值。jdp[i][j]=min{dp[k][j-1]+cost[k+1][i]}又由得出cost[1][i]=cost[1][k]+cost[k+1][i]+sum[k]*(sum[i]-sum[k])cost[k+1][i]=cost[1][i]-cost[1][k]-sum[k]*(sum[i]-sum[k])
2014-08-23 21:03:06
388
原创 hdoj 3480 斜率优化DP
首先从小到大排序。然后设 dp[i][j]表示前j个数分成i组的最小花费。则 dp[i][j]=min{dp[i-1][k]+(a[j]-a[k+1])^2} 0
2014-08-22 16:58:31
407
原创 hdoj 4945 多重背包
分析:因为不能合并不同的数,所以先排除不是2的幂次的数,记为cnt,最后方案数乘上2^cnt即可。稍加思考可以得到,集合合法,要求里面2^x的数的和至少2048。直接求比较困难,我们反着考虑,求少于2048的集合个数。可以发现其实就是一个多重背包的模型。dp[i][j]表示用从2^0,2^1..到2^i组成j的方案数,则dp[i][j] = Σ(dp[i-1][j-k*(2^i)]*C(k
2014-08-16 20:55:08
372
原创 hdoj 4906 状态dp
dp[i]用二进制表写出后第i位代表的是i是否能够得到(0所以我们只需要一个2^20的dp数组循环n次即可。在每次循环中,我们枚举这位填的是j,i能转移到i + 1同时这些数需要在0-k的范围中),即组成了所有加上j之后的情况。同时每个dp[i]都需要加上dp[i]*extra(extra代表的是l中大于k的数)最后我们只需要检索所有在1<<k位的dp值的和即可
2014-08-15 22:55:13
370
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人