- 博客(143)
- 收藏
- 关注
原创 zoj 3905 dp
给你n个数 两个人去取 每个数有两种价值 对应ai和bi 每次去两个数 b那他认为较大的 a那剩下的 问a拿的最大价值是多少 dp【i】【j】表示前i个数 a拿j个的最大价值 很显然会想到 说对于i这种不一定a能拿到啊 其实 仔细想想 除了b认为最大价值对应的那个ai拿不到外 其余的都是和玉拿到的 所以很显然 的然bi排个序 那么第
2015-11-18 19:15:09 445
原创 hdu5542 CCPC中国赛 dp + 树状数组
题意是给你n个数让你求选出m个数且单调递增的个数;首先给出的数值特别大 而数的个数才1000 所以先离散处理下 ;具体思路: dp+树状数组;我是建了m棵树 用来记录没j个的情况 dp【i】【j】表示以j结尾的数 里面递增数为i个 求这些书里面包含num【j】的情况 这样跑i 建树 初始化dp【1】【j】 = 1; for(i = 2; i
2015-11-09 20:30:59 794
原创 hdu5391 威尔逊定理
当且仅当p为质数时,(p-1)!+1能被p整除。(逆定理也成立)如果不是质数 那么 应能能被1-n-1中的数整除 故 n不为质数 结果为零 4 得特判;#include#include#include#includeusing namespace std;int judge(int a){int t=sqrt(a)
2015-09-01 10:11:49 577
原创 RMQ算法 快速求区间最大最小值
RMQ基本上就是来求区间嘴子问题的maxsum【i】【j】表示从数字num【】下表i开始的后1开始初始化两个数组 for(i=1;i { maxsum[i][0]=minsum[i][0]=num[i]; }然后dp经行跟新 int k=log2(n); for(j=1;j
2015-08-10 15:13:59 1908
原创 hdu 5316 多校(3)
给你n个数 m次询问 :1.将a位置的书换成b2.询问一段区间最大子序列的和 这里最大子序列不能出现奇数下标和奇数下标相邻 偶数下标和偶数下标相邻;很明显的线段树,结构体里存4个变量:__int64 odd_even; 最大子序列是奇数下标开头 偶数下标结尾__int64 even_odd;偶数开头 奇数结尾__int64 odd_odd;奇数开头 奇数结尾
2015-08-05 11:18:08 540
原创 hdu 5334 多校(4)
题意是给你一个n*m的有0 1组成的矩阵 起点为坐上角 终点为右下角 从起点走到终点组成的一个二进制数最小;思路:1. 如果起点为零 则找到与起点相邻的联通0 的点 找到距离终点最近的一些点 然后找到最小的二进制数(建议用 bfs)2.起点不为0 则直接从起点开始找最小的二进制数 具体找法为:把下一步的点走找出来 如果其中有0的点 则不用走位1的点 把
2015-08-04 15:22:07 512
原创 hdu 5317 多校第三场
开始题意读错了 shit wa了好久 仔细一看真是水题一枚; 根据素数打表很容易得出每个数的F()值 从而可以看出1到1000000 F()的值最大为7 及(2*3*5*7*11*13*17) 告诉你区间 只需要在这个区间里找到这7个数分辨出先了多少次 这里用一个二维的数组leap【i】【j】(j小于等于7) 表示i之前j出现的次数 这样就很容易
2015-07-30 18:49:32 495
原创 hdu5323 多校题
给你一个区间(L,R) 要你求n 对于一颗线段树根节点(0,n) 线段树中存在区间为(L,R)的节点 求最小的n 说一下思路吧 这就是相当于告诉你子节点 让你求根节点吧 ,分情况讨论了 先想想在线段树中如何根据根节点得到子节点的 容易想出父亲节点的4中情况吧1.[ l , 2*r-l ]2.[ l , 2*r+1-l ] 3.[ (
2015-07-30 11:26:18 501
原创 hdu 5274 水题
内你n个数 让你求区间倒置数的对数(就是前面大后面小) 看到Q次询问 想到线段树 感觉不好实现 !!pre【i】 表示i前面与i有关的倒置数的个数 ans【i】【j】表示区间i-j倒置数的个数 这样就实现了O(1)查询 整体时间复杂度为O(n^2);#include#include#includeusing namespace std;
2015-06-21 15:32:56 811
原创 poj 1655 树形dp
题意相当于给你一棵树 让你求每个点的不同子树上的节点个数吧 注意存边的时候存双向边#include#include#includeusing namespace std;struct node{ int to,next;}A[40010];int tot,list[20010],mark[20010],n;int add(int a,int b){
2015-06-11 20:02:17 523
原创 hdu5242 上海邀请赛 优先队列+贪心
题意是给你一棵树 n个点 n-1条边 起点是1 每个点都有权值 每次能从根节点走到叶子节点 经行k次游戏 每次都是从1开始 拿过的点的权值不能拿第二次 问最大权值和;开始看到题时也没想到什么方法 就按照常规的来 结果超时了 试着优化了好多次 最后过了 百度题解说是树链剖分 醉了 还没学!!!说说我的做法吧 map【i】=a
2015-06-02 19:20:29 829
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人