自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 菱形输出题解

一道简单菱形题

2023-03-24 14:32:06 94

原创 hdu2196 computer

思路:①我们设定Dp【u】表示以u为根的子树中,距离点u最远距离长度。那么有:Dp【u】=max(Dp【v】+W(u,v));②现在对于一个点u来讲,有两个方向,一个是子树方向,一个是非子树方向。我们搞定了子树方向,就剩下非子树方向了。那么设定F【u】表示非子树方向到点u节点最远的长度。对于一个点来说,如果是非子树方向就有两种递推状态的方案:1.从父亲节点来(从根节点到当前节点这条路...

2020-03-17 20:44:42 335

原创 poj2362 square

dfs#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int m,SUM,l;int a[27],vis[27];int dfs(int pos,int sum_1,int num){ if(...

2020-03-05 21:00:00 176

原创 p2277 24点游戏

老师的代码 简单解释一下#include<iostream>#include<cstdio>#include<cmath>#include<bits/stdc++.h>#include<algorithm>using namespace std;double a[5];int flag;void dfs(int n,do...

2020-03-04 20:04:47 518

原创 Tyvj 清理垃圾

用f[i,j]表示:完成前i项任务,若Candy花了j分钟,那么飘飘乎居士最少花f[i,j]分钟;a[i]表示:Candy完成第i项任务所花的时间;b[i]表示:飘飘乎居士完成第i项任务所花的时间。则方程为:f[i,j]=Min{f[i-1,j]+b[i],f[i-1,j-a[i]]} 。当j<a[i]时特判。解释几个点:转移的第二层循环为什么从0扫起,是因为可能存在candy不...

2020-03-03 20:26:33 227

原创 poj1160 Post Office

dp[i][j]:前i个村庄建j个邮局的最小距离和dis[i][j]:第i个村庄到第j个村庄之间建1个邮局的最小距离和(预处理)状态转移方程:dp[i][j] = min(dp[i][j],dp[k][j - 1] + dis[k + 1][j])还有一点,计算dis[i][j]时,dis[i][j - 1]已经计算出来,而且可以推导出无论j - 1为奇数还是偶数,dis[i][j]均可以写...

2020-03-01 13:06:46 150

原创 poj1155 TELE

树形背包先解释一下题意:一个电视台转播比赛,电视网络类似于树,树的节点为中转站或者用户。输入:N M N表示转发站和用户总数,M为用户数以下N-M行,第i行第一个K,表示转发站i和K个(转发站或用户)相连, 其后第k对数val,cost表示,第i个转发站到val有边,费用cost。最后一行M个数表示每个用户愿意负的钱。输出:不亏本前提下,可以收到节目最多的用户数。(如果某个用户要收到节...

2020-03-01 11:17:14 139

原创 p1908 求逆序对(树状数组)

当ai < 10^5的时候树状数组向上修改,向下查询(即传统方法)。逆向枚举每一个数,先查询已经插入树状数组中比他小的元素的个数,累加ans;然后再把这个数加入到树状数组。for(i=n;i>=1;i–){ans+=getsum(a[i]-1);fix(a[i]);}...

2020-02-29 10:29:49 373 1

原创 Vijo114 小胖守皇宫

F[X][0]表示结点X的父亲放了守卫的最小花费,F[X][1]表示结点X自身放了守卫的最小花费,F[X][2]表示结点X和父亲都不放守卫,X的其中一个儿子放了守卫的最小花费。这样,父亲放了守卫,X可以选择放守卫(F[X][1]),或者可以是儿子放或不放守卫(F[son][1],F[son][2])。自身放守卫,则儿子都是父亲放了守卫(F[son][0])。其中一个儿子放了守卫,则枚举哪个儿...

2020-02-28 12:14:45 150

原创 hdu2746 string painter

这代码是没a的,前面的部分应该和bzoj1260思路一样,但是不对,改不动了,哪天再改。#include<cstdio>#include<algorithm>#include<iostream>#define maxx 1000000007using namespace std;char a[107],b[107];int dp[107],f[10...

2020-02-27 11:49:01 89

原创 bzoj1864 三色二叉树

建树学一下!开个build递归建树,有点像二分!#include<cstdio>#include<algorithm>//#include<bits/stdc++.h>#include<cstring>#define maxn 10007using namespace std;char s[maxn];int ch[maxn][2],...

2020-02-26 12:58:22 105

原创 hdu1520(poj2342) Anniversary party

入门树形dp,f[i][0]表示不选择i的最大,f[i][1]表示选择i的最大vis记录是否选择 错了错了vis是记录是否遍历过的,in记录有没有上司#include<iostream>#include<cstdio>#include<algorithm>//#include<bits/stdc++.h>#include<cstri...

2020-02-26 11:17:44 131 1

原创 p1880石子合并——区间dp

环状2*n 区间dp输出最大值和最小值,f[i][i+n-1]#include<cstdio>#include<algorithm>#include<iostream>using namespace std;int n,w[205],f1[205][205],f2[205][205],sum[205];int main(){ scanf(...

2020-02-26 08:39:24 113

原创 lnsyoj137乘积最大

区间dp,f[i][j]表示方用了i个乘号到第j位数字最大的乘积,最后输出f[k][n-1]#include<iostream>#include<string>using namespace std;string s;long long man,f[41][41]={{0}},n,k;long long cs(int ks,int js)//计算一段的值{ ...

2020-02-26 08:38:57 176

原创 bzoj1260涂色paint

#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace std;int f[55][55];char s[55];int main(){ scanf("%s",s+1); int n=strlen(s+1); me...

2020-02-26 08:38:47 88

原创 noip2008传纸条

普通dp讲下思路,四维的数组是同时动规两边的路径,四种走法(2*2),最后输出比较一下记录ans。#include<cstdio>#include<algorithm>#include<iostream>#define maxn 55using namespace std;int f[maxn][maxn][maxn][maxn],a[maxn][...

2020-02-25 13:22:40 81

原创 poj2955 brackets

基础区间dp#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dp[107][107];char s[107];int main(){ while(scanf("%s",s)!=EOF&a...

2020-02-22 12:12:51 93

原创 区间dp学习笔记

区间dp相关整理定义:区间动态规划问题一般都是考虑,对于每段区间,他们的最优值都是由几段更小区间的最优值得到,是分治思想的一种应用,将一个区间问题不断划分为更小的区间直至一个元素组成的区间,枚举他们的组合 ,求合并后的最优值。设F[i,j](1<=i<=j<=n)表示区间[i,j]内的数字相加的最小代价 最小区间F[i,i]=0(一个数字无法合并,所以代价为0)。每次用变量...

2020-02-22 11:06:59 140

原创 poj2155 Matrix

二维树状数组加差分#include<cstdio> #include<algorithm> #include<cstring> int t,n,k,x1,y1,x2,y2; int e[1111][1111]; char ch[5]; void change(int x,int y,int val) { for(int i...

2020-02-22 09:09:45 90

原创 树状数组学习笔记

引入如何把一个正整数x分成几个区间?while(x>0){ printf("[%d,%d]\n",x-(x&-x)+1,x); x-=x&-x;}这里来了解一下lowbit()函数。int lowbit(int x){ return x&-x;}返回值为对参数x转为二进制后,将最后一个1进位的结果。例如,l...

2020-02-18 13:21:03 81

原创 lnsyoj111 求和

树状数组模板题#include<cstdio>#include<algorithm>#include<iostream>using namespace std;const int maxn=100007;int a[maxn],e[maxn],n,m;void fix(int x,int y){ int i; for(i=x;i<=n;...

2020-02-18 12:44:43 225

原创 poj2352 stars(lnsyoj112变式)

等级判别:只要该星星左下方(包括正下方和正左方,不包括自己)有几个星星,等级就是几。#include<cstdio>#include<algorithm>#include<iostream>using namespace std;const int range=32007;int c[range],star[15007];void add(int ...

2020-02-17 11:56:44 150

原创 p1196【NOI2002】银河英雄传说

所谓带权并查集本题所求的不止是两个编号之间是否有关系,还要求两个编号之间有什么关系,这就要求我们维护多个数组,fa[]数组维护两个编号之间的连通性,re[]维护编号为i的战舰到fa[i]之间的距离,num[]维护编号为i的战舰所在的那一列有多少战舰。#include<cstdio>#include<algorithm>#include<iostream>...

2020-02-16 10:26:05 251

原创 p2024【NOI2002】食物链

带权并查集的应用,re数组保存元素到达父节点的权值,0表示同种动物,1捕食关系,2表示被捕食关系。注意一下路径压缩和合并时对权值的操作。合并时fa[f1]=f2; re[f1]=(re[a]-re[b]+3)%3;加三是为防止值是负的,合并之后和刚才的关系应是相反的,所以a与b的权值相减,可以证明。路径压缩时fa[x]=find(f);re[x]=(re[x]+re[f])%...

2020-02-15 11:56:06 121

原创 p1196关押罪犯

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;struct node{ int x,y,val;}f[100005];int n,m;int fa[100005],b[100005];int find(int x){ if(fa[x]==x)...

2020-02-15 10:09:14 112

原创 栈学习笔记

栈定义:它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈应用:1、字符串表达式计算2、括号匹配单调栈定义:栈内元素单调递增或者单调递减的...

2020-02-14 14:13:48 134

原创 lnsyoj102bad hair day

题目大意:n个牛排成一列向右看,牛i能看到牛j的头顶,当且仅当牛j在牛i的右边并且牛i与牛j之间的所有牛均比牛i矮。 设牛i能看到的牛数为Ci,求∑Ci (1 ≤ N ≤ 80,000)。算法解析:可以转化为:这n头牛共能被多少头牛看见。维护一个单减栈。当我们新加入一个高度值时,如果栈中存在元素小于新加入的高度值,那么这些小的牛肯定看不见这个高度的牛(那就看不见这头牛后边的所有牛), 所...

2020-02-14 14:09:37 126

原创 p4147玉蟾宫

1.我们按行去划分,O(n)枚举行,对该行即以上的部分做最大矩阵处理。2.那么我们用pos数组记录每行向上可延伸的最大距离,预处理的方式即为:(1)读到一个‘F’,该处pos=上一行该列pos的值+1。(2)读到一个‘R’,该处pos=0(因为该处不可向上伸展)。for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { c=ge...

2020-02-14 13:56:22 260

原创 poj1796 Feel Good

#include<cstdio>#include<algorithm>#include<iostream>#include<stack>using namespace std;const int maxn=1e5+7;/*int n,ansl,ansr;long long num,ans;struct node{ int l,r,v...

2020-02-14 13:54:23 176

原创 lnsyoj101括弧匹配检验

原题就是一个栈的应用,不是单调栈。#include<cstdio>#include<algorithm>#include<iostream>#include<stack>#include<string>#include<cstring>using namespace std;string a,stk;int...

2020-02-14 13:12:33 214

原创 lnsyoj106猴子

这道题的算法是一个动态规划加单调队列优化时间复杂度,未优化的时间复杂度是O(nnm),优化后是O(nm)。构造一个单减队列,队头是起始点,新入队的元素是要跳跃到的树。代码如下#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#include<...

2020-02-14 10:48:40 163

原创 lnsyoj105烽火传递

#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#include<string> using namespace std;const int maxn=100007;int a[maxn],q[maxn],s[maxn];//s保存每...

2020-02-13 11:51:53 113

原创 lnsyoj91【USACO07FEB】cow sorting牛排序

置换环理论以本题为例子原序列:2 3 4 1 6 5排序后:1 2 3 4 5 6这个序列可以找到两个单独的置换环{ {1, 2, 3, 4} {5, 6} },就是几个数通过几次交换到达排好序正确的位置不需要与其他数交换。显然这样是最优的,可以发现,若一个置换环中有n个元素,则可以通过n-1次交换使得这n个元素归位。那么总的交换次数就是置换环的数量-1。结论是:最少交换次数就是总元...

2020-02-11 10:37:10 235

原创 p1353【USACO08JAN】跑步running

第一种dp方法先讲一下状态转移方程f[i][j]就是第is时奶牛的疲劳度是j,那么我们就可以就ta这1s是否休息进行讨论。如果休息的话,就要一休息到底,所以把疲劳度恢复成0所用的时间是i+j,恢复时走的距离是不变的,所以恢复完体力后所走的距离就是恢复体力前所走的距离。那么状态转移方程1就出来啦: f[i+j][0]=max(f[i+j][0],f[i-1][j+1]);...

2020-02-09 12:25:22 229

原创 最长公共上升子序列——动态规划

最长公共上升子序列(LCIS)的O(n^2)算法预备知识:动态规划的基本思想,LCS,LIS。问题:字符串a,字符串b,求a和b的LCIS(最长公共上升子序列)。首先我们可以看到,这个问题具有相当多的重叠子问题。于是我们想到用DP做。DP的首要任务是什么?定义状态。定义状态F[i][j]表示以a串的前i个字符b串的前j个字符且以b[j]为结尾构成的LCIS的长度我们来考察一下这个这个状态...

2020-02-09 11:20:49 373

原创 最长上升子序列

动态规划算法#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int f[1007];int a[1007];int main(){ int n; cin>>n; for(int i=1;i<=n;i++...

2020-02-09 10:15:21 58

原创 最长公共子序列——动态规划

动态规划思想,O(n2)算法。这个是求最长公共上升子序列的基础。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int f[1007][1007];int a[1007],b[1007];int mai...

2020-02-09 09:28:55 84

原创 p4289移动玩具

#include#include#includeusing namespace std;typedef long long ll;const int maxn=(1<<16)+5;int s,e,now,temp,f;int h[2];int t[2];int v[2][maxn];//存储步数int q[2][maxn];void expand(int m,in...

2020-02-08 08:50:44 149

原创 p1379八数码难题

这道题就是一个双向bfs的例题,需要用到map判重减少时间复杂度,这一点具体我还没有太明白,等弄明白了在补充上来。直接上代码#include<cstdio>#include<iostream>#include<algorithm>#include<queue>#include<map>using namespace std;...

2020-02-07 12:26:13 225

原创 双向bfs学习笔记

双向bfs相关整理双向bfs主要是引入起点和终点一起遍历,并给数组多加一维。因为双向的最短路一定是整体的最短路,即搜索到一个点另一位也已经搜索到,直接输出即可。双向bfs的好处:考虑广度优先遍历,越到后面的层数,常数越大,如果采用双向bfs这一遍历方式可以使常数大大减小,从而起到降低时间复杂度的作用。双向和单向的区别在于,可以从终点和起点同时出发,记录每个点是被从起点开始的访问了(开一个vi...

2020-02-07 12:13:43 390

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除