【QBXT】学习笔记——Day3/4图论+dp

继续上传一波笔记吧。

Day3 1.16AM

今天讲图论,以习题为主。

开篇水题:
给一幅图,若删去一个点后变成一棵树,则这个点合法。问哪些点合法。
思路根据树的性质:这个点不是割点,m-这个点的度数=n-2

CF666B:给定边权为1的有向图,求四个不同点ABCD使得A->B+B->C+C->D最大。
B题还是很水的,nm很小,预处理两点间的dis,然后枚举BC乱搞即可。

CF543B:给定边权为1的无向图,问至少保留多少遍,使得a1到b1最短路不超过l1,a2到b2最短路不超过l2
显然答案是dis(a1,b1)+dis(a2,b2)-边公共部分,dis为两点间任意一条路径。
所以我们枚举公共部分,显然只用枚举起点和终点就行了。
接着问题就转化成a1->x+y->b1和a1->y+x->b1中的min,然后就很水灵。

BZOJ2143
难点在于如何构图,暴力构图跑是n^4logn的。
(i,j,k)表示现在在i,j这个地方,能量为k,即我能向四周跳k步。
那么(i,j,k)->(相邻点,k-1)代价为0,而(i,j,k)->(相邻点,B_相邻点)的代价就是A_相邻点。
这样构图的点数边数都是n^3

竞赛图:任意两点之间有且只有一条有向边
最小支配数:选择最少的点,使得对于任意点,要么被选择,要么被那些选择的点指向它

ACM-ICPC-WF2012E
至少有一个点的入度>=37,选择它,然后剩下图的规模<=37,
接着至少有一个点的入度>=18,选择它,然后剩下图规模<=18,
这样可以得到答案上界为6。乱搞即可。

割点问题:给定一张拓扑图,保证从1号点能走到n号点,问删掉哪些点之后,使得1号点走不到n号点。
因为这个图是拓扑图,我们可以用dp来求1号点到每个点的方案总数f[i],以及每个点到n号点的方案总数g[i]。
对于一个点,如果f[i]*g[i]=f[n]则肯定是割点。
貌似会爆LL,感受恶意。

CF295B:给定一个有边权的图。再给定一个1~n的排列。
按排列中的顺序依次删除点,问每次删除后,所有点对的最短路的和是多少。
套路题,倒序加点,floyd。也可以用dij来更新其他点。

HNOI2009最小圈
被秒的题怎么这么可怕…
二分一个答案,然后将每一个环上的所有边-mid求西格玛,若有答案<0,则mid大了…

导出子图:
一个无向图(V,E),选择其中若干点属于V,然后将这些点之间的边连起来。

脑洞题:
给定一张有点权有边权的图。
选择其中至少2个点,令这些点的导出子图是G,要求G是连通的,且点权除以边权最大。
问这个最大值是多少。
显然导出子图一定只选两个点就行了,所以枚举所有边更新答案即可。

混合图:
构造题。给定一张部分有向边部分无向边的图,将其中的无向边变成有向边,使得图无环。
答案是一个DAG,那么我们可以用一下拓扑排序。
先保留所有有向边作一个拓扑序,对于无向边,将dag小的连向dag大的。

完全有向图:任意两点之间有A->B和B->A两条路径。

PKU2017校赛:给定n个点m条有向边,在一张完全有向图上任意选一个点为起点,
选择一条路径,使得将这m条有向边都至少走一遍,求最少走的边的条数,并输出任意一种方案。
问题转化为求加最少的有向边,使得原图变成半欧拉图。其实想法就是一条边经过多次相当于加一条边嘛。
贪心做,尽量让所有点入度=出度,不是很会。

半欧拉图:能一笔走完的图。
欧拉图:能一笔走完且终点在起点的图。
弱连通图:变成无向图后是连通的。

弗洛来(fleury)求欧拉回路:尽量不走是桥的边。
dfs求:利用欧拉定理判断出一个图存在欧拉通路或回路后,选择一个正确的起始顶点,
用DFS 算法遍历所有的边(每条边只遍历一次),遇到走不通就回退。
在搜索前进方向上将遍历过的边按顺序记录下来。这组边的排列就组成了一条欧拉通路或回路。

!HDU6166最短路(好题!):给定一个n个点,m条边的有向带权图,有k个特殊点,求这k个特殊点两两间最短路的min
可以考虑一下错误的分治:将点分成k/2的部分和k/2+n-k两部分,然后就可以跑出左边到右边的最短路的min。
那么正解是一个玄学的二进制分类。
二进制下,任意两个数至少有一位不同。
这样枚举每一个二进制位,将点(分为这一位为0的点)和(这一位为1的点+非特殊点)两部分。
这样我们可以跑出左边到右边所有最短路的min。
那么因为前面二进制的性质,我们每一位都跑了以后,每个点对之间的min都会跑到。
这样复杂度是O(nlognlogk)的。

然后qt想出了另外一种做法:
我们可以考虑答案的形式,要么是在仅有k这些点中互相连边。要么是k——非k——k这种形式。
这样我们可以考虑左右分成k和非k两部分,我们只要求出k到非k的最短路次短路,再求非k到k的最短路次短路。
就可以得到最后答案。

我还想到一种随机的做法:http://blog.csdn.net/mengxiang000000/article/details/77483738
可以把这k个点对半分,然后我们将前一半作为源点向后一半跑最短路。
这样正确概率是1/4,即恰好起点在前一半,终点在后一半。错误的概率就是3/4.
那么我们随机多次这k个点的排列,每次跑一遍最短路。
因为我们只要在这多次中正确一次即可,那么25次左右错误概率就在千分之一。
就这样。

HDU4903(陈立杰神题- -):有一张n个点的无向完全图,第i个点的编号是i,每条边的边权在1到L之间的正整数,
问存在多少个图使得1到n的最短路是k。
切入点在看什么是可做的…显然只有关于点的东西可以做。
先考虑如果我们知道所有点到1号点的距离,记为d。我们怎么算方案数?
先把所有的d排序,我们可以知道:
如果di==dj balabala(以下忘了)

如果 di<dj d i < d j 可知道要满足两个条件:
1.任意di+边>=dj
2.存在di+边==dj.

令ti为选择边权为i的方案数。
那么边权就要满足L>=ei>=dj-di,这个很容易就算出来。
然后我们很容易就可以算了啊0.0

(上面没听懂,下面也没听懂)

现在要优化这个求d的方法,需要减枝。
关注到我们并不需要知道这些点距离的顺序。
令f[x]为di=x的有多少个。
我们枚举一个di就可以了什么的。

Day3 1.16PM

又是要被julao虐的一个下午。

CC (Problem Code: GERALD07)Chef and Graph Queries
莫队+LCT,不会题。
实际上还是会的,也是套路题,不是很难做,就是数据结构不好写。

斯坦纳树:给定一张图,其中有k个点是特殊点,问最少用图中的多少边将这k个特殊点连起来。
算法是这样的:
令dp[i][j]表示以i为根,扩展出去得到j这个状态的特殊点,所需要的最少边。
存在两种情况——从其它点转移,从自身转移。
dp[i][j]=min{dp[i][k]+dp[i][j^k]}
dp[i][j]=min{dp[x][j]+1},(x与i有边相连)
对于第一种情况无后效性,时间复杂度为3^10*n,第二种情况有后效性,需要通过SPFA来实现转移,时间复杂度为2^10*SPFA(n,m)
第一种情况是子集的转移,第二种是点的转移,理解一下就好了。zhw的伪代码在main里面。

WC2008游览计划:给定一个n*m的矩阵,其中有k个特殊点,这k个特殊点的权值为0,其余点的权值均由读入给定。
选择其中若干点,使得任意两个特殊点在四联通的前提下可达,问选择的点的权值和最小是多少。
其实就是裸的斯坦纳树,只是转移上稍微修改一下。

APIO2013机器人
这还是一题斯坦纳树。虽然我没有看出来。然后最后实际上只是转移和斯坦纳树类似??
令f[i][j][l][r]为l~r的复合机器人现在停在(i,j)的最少移动次数。
这样这个状态可以通过自身或者邻格来转移。
f[i][j][l][k]+f[i][j][k+1][r]或者
f[邻格][l][r]+1
预处理每个点往四个方向一直推能推到哪里。
写了以后发现spfa会T。
我们考虑开两个队列,在spfa之前把起始的位置拍好序扔到队列1,
然后每次取出两个队列队头较小的松弛,松弛到的点加入队列2,这样可以保证队列1和队列2有序,
spfa就进化为了bfs,排序最好用O(n)的计数排序,跑的飞快。

接下来是二分图判定问题:通过染色(离线)或者并查集(在线)来判断。
裸题大概是:NOIP关押罪犯。

【CodeForces19E】Fairy:给定一个无向图,问删哪些边(即删一条)之后这个图变成二分图。
一个没有简单奇环的图,一定没有奇环。所以题目要找的就是覆盖所有简单奇环的边。在dfs树上,
简单环与返祖边一一对应。所以在dfs的时候每遇到一个返祖边,就差分标记路径。最后找到被所有路径覆盖的树边。
也就是说,我们需要找到所有奇环的交。
然后我们发现,如果一个奇环的边同时在一个偶环内,这些边是不能删除的。
因为我们将这两个奇环和偶环亦或一下,发现会剩下一个奇环。
因此啊,我们还要找到所有偶环的并。
上面这个只是解法的思路,实现起来有很多细节:
如果某个树边在一个偶环上,删除它之后会产生新的奇环,所以还要差分标记一下偶环个数。
构成奇环的返祖边可以被纳入答案,当且仅当图中只有一个奇环【因为他只能覆盖一个奇环】。
如果图中没有奇环,可以随意删除一条边。
注意原图不联通的情况.blog
上面这题好皮啊。

匹配问题
二分图最大匹配:匈牙利算法,最大流。
二分图最大权匹配:KM算法,费用流。
一般图最大匹配:带花树。
一般图最大权匹配:带权带花树。
貌似一般没有裸的,但是我好像都不会。

2016集训队互测:给定n个奇数,将每个数拆成二进制后,都选择其中一位。使得最终所有数的异或和最大。
(原题没有奇数的限制)
其实把每个数字拆成每一位,连向对面对应的2^k的点,这样跑一个二分图最大权匹配。
现在保证了或和最大,那么剩下的数字就选择2^0那个点就行了(因为都是奇数!)。

2-sat问题
连边表示“必须”,这个东西来之前学了一下。

POJ3686:n对新人要结婚,第i对有两个时间段可以选Ai和Bi,它们结婚耗时Di。
不允许两对新人结婚时间有交集,问是否存在一种方案满足所有人都能结婚。
貌似做过。连边也很简单。设Ai和Bi为两个时间段。
有一种特殊情况是Ai和AjBj都不能同时选,那么我们就连一条Ai到Bi的边。

下面没有原题好不爽。
然后我找到了。
HDU2433 Travel(图的最短路):我们定义一张图的最短路为任意两点的最短路之和。
给定一个无权无向图,求每条边被删除时的图的最短路。
对于每个点求出最短路树,这棵树一定有n-1条边,对于每条边被删除,若在最短路树上,
则重新求一次最短路,否则直接统计答案。最短路可以用BFS代替。因此总复杂度为O(n^2m)。
巧妙换了一下顺序,先枚举点,再枚举删边。

这题也找不到,好不爽。
网络:给定一张图,维护两个操作。1.加一条边。
2.查询存在多少点,删去它后,剩下的图的所有联通块均为链。
有一些很显然的性质:1.剩下的点的度数<=2,且没有环。
2.如果一个点度数大于3,则一定要删掉它
3.如果一个点度数等于3,答案一定是删去这个点,或者删去它相邻的3个点中的某一个,或者无解。
对于2和3,我们只需要在加边过程中找到这个点,维护删掉这四个点后的并查集。
对于1,如果不存在一个点度数超过2,并查集维护有多少个环及环的长度。

BZOJ4668冷战(联通)
给定一张图,两个操作。
1:加入一条边。
2:给定两个点,查询这两个点最早联通的时间。
看似是裸的动态树……
用并查集启发式合并。
每次查询时暴力跑就可以了……

HDU5385 2015#8 The Path
给定一张n个点m条有向边的图,构造每条边的边权(边权为正整数),
令d(x)表示1到x的最短路,使得存在点i(1<=i<=n)满足d(1)

Day3 1.16Night

闲着蛋疼居然还讲课了。

讲了一下数位dp的简单应用。
比如求1~n中有多少个数是7的倍数
记f[i][j][k]为到第i位(从低位到高位),余数为j,状态为k的方案数。
其中当k=0,则第i位之前所有数字和n相同。
当k=1,第i位之前有至少一个数字不和n相同。

伪代码:

dp[len+1][0][0]=1;

for(i=len+1;i>1;--i)
 for(j=0;j<6;++j)
  for(k=0;k<=9;++k)
  {
   f[i-1][(j*10+k)%7][1]+=f[i][j][1];
   if(k<n[i])
    f[i-1][(j*10+k)%7][1]+=f[i][j][0];
   if(k==n[i])
    f[i-1][(j*10+k)%7][0]+=f[i][j][0];
  }

ans=f[1][0][0]+f[1][0][1];

Day4 1.17AM

应该是一上午的不可做dp。

热身题:
有n个人,第i个人会发表自己的意见,形如以下4种。
1.第k个人是好人。
2.第k个人是坏人。
3.如果第k1个人是好人,则第k2个人是坏人。
4.如果第k1个人是坏人,则第k2个人是好人。
好人一定说真话,坏人不一定说真话,求这n个人最多有多少人是好人。
n<=1000,1<=i-k,i-k1,i-k2<=10。
观察到每个人是好人还是坏人只跟他前10个人有关,我们就可以状压。

CQOI2009叶子的染色:
观察到一些性质:
1.相邻的两个节点不能同时染一种颜色。
2.根节点尽量染色可以保证答案不变差。
考虑一下枚举根时怎么求答案。
令f[i][0/1]表示以i为根,根染成黑/ 白时最小代价,转移显然。
f[i][0]=sum{min(dp[j][0]-1,dp[j][1])+1},1时同理。
考虑O(n)的做法,可以使用树上经典的O(1)换根方法,但是要记录很多东西,不阐述。
实际上我们以什么作为根并没有什么关系,因为换根后所有叶子节点走上去的节点不变。
应该说答案本质不变吧,可以考虑一下黑白点换根以及黑透明点换根的情况。
前一种显然不变,后一种换根后,我们可以将原来黑节点变透明,透明点变黑就行了。
所以随便选择一个点作为根就行了。当然选非叶子节点吧,因为叶子还要特判。(貌似原题规定非叶子)

CF314E:给定一个长度为n的仅包含左括号和问号的字符串,
将问号变成左括号或右括号使得该括号序列合法,求方案总数。
讲课时先讲了n<=3000,实际上n<=10^5。
令f[i][j]为前i个字符,差值为j,转移显然,j不能为负数。答案f[n][0]。
然而原来也是n^2过,用了蛇皮优化,cache卡常数。顺便把第一维滚动一下。

dp的基本优化:
1:单调队列优化。
2:矩阵乘法加速。
3:线段树优化。
4:斜率优化。
5:常数优化。
6:四边形不等式优化。
7:决策单调性优化。
8:迷之优化。

练习题:
有n个数,选择其中若干数,使得每连续k个数中都至少有一个数被选中,且选出的数的和最小。
单调队列优化,讲过了。

最长上升子序列,线duang树优化一下。(终于有能做的题了)

BZOJ1911特别行动队
看这个式子就是斜率优化入门题啊。
二话不说先写一个暴力。
令dp[i]表示1~i的人已经分好组,这种情况下的最大得分,枚举上一组是以j结尾的。
有dp[i]=max{dp[j]+(s[i]-s[j])^2*a+(s[i]-s[j])*b+c}。
其中s[i]表示d[1]~d[i]的和。
时间复杂度为n^2。
然后就斜率优化一下,在main里面。
截距式终于看懂了。
http://blog.csdn.net/u010336344/article/details/52693858

然后是一堆dp题。

HDU5693 D游戏(百度之星初赛?):给定n个数,每次可以删除其中连续若干个数字,要求其数字个数>=2且为等差数列,等差数列的差值k∈A,集合A给定。
求至多能删除多少数字。
有一个性质:一次删除删2个或者3个。
f[l][r]表示能否删完,F[l][r]表示最多能删多少。
处理出f后问题转化为有一堆线段,选一些使得他们不重合而且覆盖的点最多。
将所有线段按R排序,F_R=F_{L-1}+(R-L+1)
那么考虑f的求法。
如果最后一次删除没有包含l,并且没有包含r,可以分成两个子问题。
我们可以枚举一个虚线,这样我们可以保证没有一种方法既删除虚线左边又删除右边。
那么若[L,K]和[K+1,R]被删除,可以合并成[L,R]。
如果最后一次删除又包含l,又包含r,分成删除2个和3个的情况。
对于前者要满足(l+1,r-1)都被删除。对于后者要满足三者等差,而且中间被删除。

HDU5712 D++游戏(复赛):
给定n个数,每次可以选择消去连续k个数,要求这k个数满足等差序列并且p<=k<=q。(p,q都是给定的)
求最多能删去多少数字。
n<=50。
实际上和前一题思路差不多,只是没有了性质。
其实也是考虑f和F两个dp,重点还是f的求法。
发现和上一个的第一种情况是一样的。
但第二中情况更复杂,如果用dfs是会复杂度爆炸的。
所以我们要套一个dp。
dp[i][j][l]表示当前到i,已经选了j个删除,上一个选定是l,
这样a[i]-a[l]其实就是弄出来一个差值,这样我们前面再维护枚举一个k,
表示i前一个选了什么,就可以转移了。
我们发现这似乎复杂度还是不行,但满足k,i,l的不多,所以我们可以用一个链表预处理一下。
感觉写起来十分麻烦啊。
还是要做的- -

HDU3022 Sum of Digits
最多不超过10000组数据,每组数据给定两个数n,m,求一个最小的数,使得该数每一位之和等于n,每一位的平方和等于m。
若无解或者答案超过100位,输出no solution。
n,m<=10000。
显然当n>900或m>8100时no solution。
然后我们考虑一下性质:这个数字的位数要最小,位数最小时最高位要最小。
那么我们开两个数组,f[i][j]表示和为i,平方和为j时最小位数
dp[i][j]的i,j意义同f,记录值为最高位的最小值。

Day4 1.14PM

继续是更难的dp

!!number(HDU5181):
有一个栈,其中有n个数1~n按顺序依次进入栈顶,在某个时刻弹出。
其中m个限制,形如数字A必须在数字B之前弹出。
求方案总数,答案对大质数取模。
n<=300,m<=90000
没有限制的情况就是卡特兰数,然而有限制怎么做?
先考虑没有限制的dp,令f[l][r]为l~r出栈的方案数。
我们枚举一个k,表示k是最后一个出栈的数字,这样问题就是两部分,
显然k进栈时l~k-1已经出栈,而k+1~r与k无关那么l~k-1和k+1~r都是独立的。
方案数就是两个的乘积。f[l][r]=sum(f[l][k-1]*f[k+1][r]),卡特兰数。
现在如果有限制,也就是说我们枚举k时要满足所有的限制,
只要不与限制冲突就可以转移。但是这么做太蠢了。
老师的方法:
我们预处理一个数组v[i][j][k],表示f[i][j]能否通过k转移,
现在就是处理这个数组的问题了。
我们思考一下什么时候会发生矛盾:

考虑一个限制(A,B),表示A必须在B之前弹出。
对于一个dp[l][r]若l<=A < B<=r,则A不能作为最后一个弹出,而其它都是可以的。
为什么呢?
当A < x<=B时显然成立。
l<=x<A l <= x < A 或B < x<=r时对于其中一边是没有影响的,对于另一边在子dp中已经满足了A在B之前弹出。
若l<=B<=A<=r,则B+1~A不能作为最后一个出栈,若这些成为最后一个出栈的数,则B显然比A先弹出。
枚举所有区间和x,判断是否可以转移。
时间复杂度还是 n3m n 3 m
观察一个区间,(A,B),对于它来说,有用的区间一定是l<=min(A,B)且r>=max(A,B)的
其实这玩意就相当于一个个矩阵,我们把矩阵的范围就标记为不可取。
变成了矩阵覆盖问题,差分一下就行了。
(在矩阵的左上角和右下角的右下格+1,在左下角的下格和右上角的右格-1)

其实后面没有怎么听懂,然后晚一点再看看。

TC SRM547 div1-level3:一个正n边形,求有多少种三角剖分方案,使得面积最大的三角形唯一,
答案对p取模。N<=444,p<=1e9+7。
对于每一块单独求出小于该三角形面积的方案总数。
令dp[i]表示到第i个端点且当前剖成的三角形均小于最大三角形面积时的方案总数。
有dp[i]=sum(dp[j]*dp[i-j+1])当且仅当A1,Aj,Ai组成的三角形小于枚举的面积。
时间复杂度n^4。
没听懂。好颓啊,为什么n^4能跑444。

又是没有原题的。
有一张纸,被划分成了n*m的格子,每个格子是黑色或者是白色的,
每次可以选择一条竖的或者横的不跨越格子的线,然后将纸对折。
对折时要保证两面对应的格子颜色相同,且不能将大的一面覆盖到小的上面。
求若干次操作后不同的结局。结局不同当且仅当剩下的纸在原矩阵中位置不同。
最暴力的方法是n^7,如果将判断两个矩阵是不是一样变成hash就是n^5
然后先横着折和竖着折是没什么关系的,所以我们转化为n=1和m=1的情况。
那么就降到n^3

UVALive-6932(BZOJ权限题)
给定3个只包含“?”或小写字母的字符串s,其中“?”表示可能是任意一个小写字母。
已知3个字符串的字典序是有序的且互不相同。问方案总数。
|s|<=100000。
然后其实是一道水题。

令dp[i][0/1][0/1]表示前i个字符,第一个字符串是否等于第二个字符串,
第二字符串是否等于第三个字符串。
枚举第i+1位所有问号是什么字母,直接转移。复杂度n*26^3。
如何优化。
预处理出f[i][j][k][0/1/2][0/1/2]表示第一个串字符是i,第二个串字符是j,
第三个串字符是k,由于可能出现“?”或者没有字符的情况。
若没有字符用0表示,若是“?”用27表示。
将其中所有“?”用字母代替后,第一个串的字符与第二个串的字符的大小关系是0/1/2,
第二个字符与第三个串字符大小关系是0/1/2的方案总数。
在转移时直接拿f数组转移。
时间复杂度为n+预处理的复杂度。

BZOJ2448 挖油 (BZOJ权限题,确实是好题)
给出一条线段,在左端点0与右端点n+1之间有n个点,
并且在0到x之间的所有点都是有油的,在每个点钻井判断是否有油需要花费ti的时间,
求能够知道x的最坏情况下最少需要花费多少时间。

令dp[i][j]表示x能取到i-1至j时要知道x具体值为多少的最少时间。
有dp[i][j]=min{max{dp[i][k-1],dp[k+1][j]}+a[k]}。
其中i<=k<=j,dp[i][i]=a[i],dp[i][i-1]=0 时间复杂度为n^3。
考虑优化。
不满足很多很多很多优化的情况(包括平行四边形优化等一干)。
但dp[i][j+1]>=dp[i][j]

考虑去掉转移中的max。
预处理出g[i][j],表示若k取到i~g[i][j],则dp[i][k-1]<=dp[k+1][j],若k取到g[i][j]+1~j,则dp[i][k-1]>=dp[k+1][j]。
dp[i][j]=mindp[k+1][j]+a[k](i<=k<=g[i][j]) d p [ i ] [ j ] = m i n d p [ k + 1 ] [ j ] + a [ k ] ( i <= k <= g [ i ] [ j ] )
dp[i][j]=mindp[i][k1]+a[k](g[i][j]<k<=j) d p [ i ] [ j ] = m i n d p [ i ] [ k − 1 ] + a [ k ] ( g [ i ] [ j ] < k <= j )

我们只考虑其中一种情况。
dp[i][j]=mindp[i][k1]+a[k](g[i][j]<k<=j) d p [ i ] [ j ] = m i n d p [ i ] [ k − 1 ] + a [ k ] ( g [ i ] [ j ] < k <= j ) 。
当固定左端点i时,随着j的增加,g[i][j]也会随之变大。
因此用单调队列维护即可。
时间复杂度为n^2。

BZOJ1713是好题,是比上一题更加丧病的题,但也是权限题。
是一个二维斜率优化,维护n个平面,算了算了。

BZOJ3675(APIO2014)序列分割。斜率优化题,终于不是权限了。

接下来是神题:
给定一个n*m的方格。要求在上面某些位置涂成黑色。
若第i行第j列是黑色且 i<n i < n ,则第i+1行第j列必然是黑色。
现在用一个刷子粉刷它,每次可以粉刷一行连续的格子。令K表示至少粉刷的次数。
现在已知K是偶数,求方案总数对1e9+7取模后的结果。
子问题1:n,m<=10000。
子问题2:n<=100,m<=10^12。
子问题3:n<=10^12,m<=100。
时限1min。
不可做不可做不可做不可做。
看ppt,看ppt,看ppt,看ppt。
矩阵构造方法就是看后一个由前一个状态的哪一个转移过来,
在对应行和列写一个数字数字数字数字。

今天做的vjudge练习赛rank2还是很高的(虽然很多dalao应该不想做)
不过随意了,但是有一题打不出好心塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值