- 博客(15)
- 收藏
- 关注
原创 bzoj1036[ZJOI2008]树的统计Count
这道题裸裸的树剖。。 求个和求个最大值即可。。 不写什么了,不会树剖的自己学。。#include<cstdio>#include<cstring>using namespace std;struct node{ int x,y,next;}a[2100000];int len,last[110000]; void ins(int x,int y) { len++; a[
2016-09-25 15:57:31
252
原创 bzoj1003: [ZJOI2006]物流运输
这道题一看就有点spfa的味道.. 但是想了半天还是没有想到spfa里面应该怎么搞。。 上网翻了一下发现这道题在spfa的基础上还要dp。。 f[i]表示前i天的最优运输路线。。 dp方程大概就是这样。。 f[i]=min(f[i],f[j]+spfa(j+1,i)+K) K就是修改一次路线所需要的额外费用。。 spfa(st,ed)表示从第st天到第ed天不修改路线的最优方案。。
2016-09-18 20:50:36
391
原创 poj 2796Feel Good
这道题师姐说用单调栈。。 所以顺便学了一下单调栈。。 建一个单调递增的队列。。 每个元素进来时在队尾t人,比他小就t。。然后插入。。 对于每一个队列里的元素,以他为最小值的一段区间,肯定是: 队列前面的一个数在原数组的位置+1 到 队列后面的一个数在原数组的位置-1 用结构体记录位置和值这道题就可以了#include<cstdio>#include<iostream>#inclu
2016-09-18 13:47:55
301
原创 noi 7627:鸡蛋的硬度
这道题有点水。。 只是一个动态规划。。 f[i][j]表示i个鸡蛋从第j层开始试需要几次。。 dp方程还是蛮好想的。。 只需相通,不论几个鸡蛋在第几层摔策略都是一样的就行了。。#include<cstdio>#include<iostream>#include<cstring>using namespace std;int f[110][110];int main() {
2016-09-18 13:43:04
392
原创 codevs 3955 最长严格上升子序列(加强版)
这道题是一道最长上升子序列。。 但是数据范围有点大。。 所以O(n^2)的正常方法过不了。。 所以要用一个不知道叫什么的东西来做。。 建一个单调递增队列,表示最长上升子序列的结果。。 每进来一个元素,就问一下是否比队尾大,如果大过队尾那么就插入,否则用二分找一个大于等于他的最小的一个并更新,这样就会更有潜力。。#include<cstdio>#include<cstring>using
2016-09-18 13:39:15
231
原创 bzoj1019: [SHOI2008]汉诺塔
定义两个数组,f和p f[x][i]表示第x根柱子有i个盘移到另一个柱子上的最小步数。。 p[x][i]表示移到哪根柱子 一共两种情况。。 先把a柱上的n-1个盘移到b柱上。。 然后把最后一个盘移到c柱上。。 然后把b柱的盘移到c柱即可。。 第二种。。 先把a柱上的n-1个盘移到b柱上。。 然后把最后一个盘移到c柱上。。 然后把b柱的移到a柱上。。 把c柱的移到b柱上。。 最
2016-09-18 13:35:15
475
原创 bzoj1082: [SCOI2005]栅栏
这道题一看就是暴搜啊。。 但是暴搜明显会超时啊。。 所以想了想加了个二分。。 发现二分还是过不了啊。。 又是经过了大神的指导。。 发现有一个玄学剪枝啊。。 不想加详细的解释啊啊。。 自己看代码吧不解释了。。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int l,r,mid,s[1
2016-08-29 15:51:37
538
原创 bzoj1081: [SCOI2005]超级格雷码
这道题感谢yzh的指导.。。(我也不知道应不应该叫他大神) 这道题他发现了规律。。 以下内容转载yzh写的博客,欢迎到他的博客去看看。。 yzh博客主页 http://blog.youkuaiyun.com/mf_chris/article/details/52326615 假设是2 3: 答案是:00 10 20 21 11 01 02 12 22 分下组:00 10 20 21 11
2016-08-29 15:05:03
434
原创 bzoj1086: [SCOI2005]王室联邦
这道题有点坑。。 不用输出最优解。。 只需输出一组解。。 用一个栈来存当前省的城市。。 一个暴搜O(n)的算法就可以过。。 代码挺简单的。。#include<cstdio>#include<cstring>#include<iostream>using namespace std;struct node { int x,y,next;}a[2100];int len,la
2016-08-29 14:40:57
465
原创 bzoj1083: [SCOI2005]繁忙的都市
这道题比较水。。 让n个点联通,有m条边给你选,让最大的边最小。。 那么至少要n-1条边。。 然后把所有边快排一次。。 用并查集依次问这两点是否联通,不联通就加多这一条边。。 代码比较简单。。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct node { int x,
2016-08-29 07:37:14
396
原创 bzoj1088: [SCOI2005]扫雷Mine
这道题以前做过,比较简单 只要枚举前两个格子的状态后面的格子都可以确定了。。 这个方法也是上网学的。。 代码还是比较简单的。。通俗易懂#include<cstdio>#include<cstring>using namespace std;int a[11000],f[11000];int n;int main() { scanf("%d",&n);int ans=0;
2016-08-26 14:24:22
364
原创 bzoj1085: [SCOI2005]骑士精神
这道题不想说。。 一开始想到爆搜 打了一下只对了三个点 上网搜了一下发现是A*算法,看了一下不就是爆搜加剪枝。。 挺容易懂得。。 哈哈。。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int dx[9]= {0,-2,-2,-1,-1,1,1,2,2};const int
2016-08-26 10:03:04
372
原创 bzoj1087: [SCOI2005]互不侵犯King
这道题我作为初学者来看有些懵。。 上网搜了一下发现大神都说是状态压缩。。 所以就开始学了一下状态压缩 状态压缩就是把每一行的状态转化为2进制,0表示不填,1表示填,只问合法状态,不用把每一个状态都问一遍。。 对时间和空间都很节省。。 这道题的dp方程也不难想(只要你会状压)。。 学会了状压之后很快就做出来了。。这道题还是比较入门。。#include<cstdio>#include<cs
2016-08-25 11:02:14
443
原创 bzoj1037: [ZJOI2008]生日聚会Party
题目自己看,不解释。。 大概的题意就是一串由n个1m个0组成的01序列,使得任意一段0的数量与1的数量的差不超过k。求总方案数 这道题一看就知道是DP,但是这种DP对我初一来说比较恶心,上网搜了一下。 发现跟常规DP有点不太一样定义状态 f[i][j][x][y]; 表示前i个人有j个男孩 当前这个位置最长的一段男生人数-女生人数= x 当前这个位置最长的一段女生人数-男生人数
2016-08-24 10:50:42
242
原创 bzoj1042: [HAOI2008]硬币购物
题意不用说了吧。一看大概就知道是背包。。 但是用背包做了半天还是没做出来 经过一位神犇的指导知道了这题要用到容斥原理 先两个for搞出4种硬币没有限制的情况下的方案数 我们要求的答案 Ans 就是 f[S] - (硬币1超限制的方案数) - (硬币2超限制的方案数) - (硬币3超限制的方案数) - (硬币4超限制的方案数) + (硬币1,2超限制的方案数) + (硬币1,3超限制的方案数)
2016-08-24 09:18:55
211
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人