自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Codeforces Educational Codeforces Round 106 /D. The Number of Pairs

Codeforces Educational Codeforces Round 106 /D. The Number of PairsD. The Number of Pairs题意:对于1≤c,d,x≤1e71\le c,d,x\le1e71≤c,d,x≤1e7,找出满足c⋅lcm(a,b)−d⋅gcd⁡(a,b)=xc\cdot lcm(a,b)-d\cdot\gcd{(a,b)}=xc⋅lcm(a,b)−d⋅gcd(a,b)=x的(a,b)(a,b)(a,b)的对数。设g=gcd⁡(a,b)g=

2021-03-21 15:33:57 165

原创 Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)/D

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)/DD.Two chandeliers题意:给出两个无限循环序列A,B以及整数k,找出最小长度x满足对于1≤i≤x1\le i\le x1≤i≤x,恰好有k对ai≠bia_i\ne b_iai​​=bi​。A序列的循环节长度为n,B序列为m。对于序列A,B,找出循环节中所有的ai≠bia_i\ne b_iai​​=bi​的时间复杂度是O(nm)O

2021-03-15 17:31:23 283

原创 Codeforces Round #707 Div. 2/C Going Home

Codeforces Round #707 Div. 2/C Going Home题意:在长度为N的数组A中找出满足ax+ay=aw+aza_x+a_y=a_w+a_zax​+ay​=aw​+az​的一组x,y,w,zx,y,w,zx,y,w,z,要求它们之间两两不同。(N≤2e5,1≤a[i]≤2.5e6(N\le 2e5,1\le a[i]\le 2.5e6(N≤2e5,1≤a[i]≤2.5e6。最简单直接的算法就是枚举序列中的(i,j)(i,j)(i,j)然后加以判断,这样做的做法是O(n2)O

2021-03-14 14:39:22 488 2

原创 Codeforces Round #705 (Div. 2)/D. GCD of an Array

Codeforces Round #705 (Div. 2)D. GCD of an Array题意:给出一个长度为n的数组,每次对其中一个元素进行乘法操作,然后询问整个数组的GCD。首先肯定想到的是,对数组的元素进行质因数分解,然后每次更新只用更新单个元素的质因数表达式。同时维护所有元素共有质因数的最小次幂,以便求GCD。之后需要考虑的式用什么数据结构来维护每个元素的质因数表达式和所有元素共有质因数的最小次幂。1、对于维护每个元素的质因数表达式。如果用vector则不便于修改,方法之一是可以使用

2021-03-07 21:40:21 264

原创 牛客IOI周赛23-普及组 /D(序列dp)

牛客IOI周赛23-普及组 /D(序列dp)题目题面:小L喜欢数和数列。小L称a1…ana_1…a_na1​…an​这些数为优秀的。小L称一个序列b1…bmb_1…b_mb1​…bm​为好的当且仅当:1.对于任意的 i(1≤i<m)i (1 \leq i <m)i(1≤i<m),满足 bi<bi+1b_i<b_{i+1}bi​<bi+1​。2.对于任意的 i(1≤i<m)i (1 \leq i <m)i(1≤i<m),满足 gcd(bi,bi+

2021-03-06 13:20:07 206

原创 UVA 11426

UVA 11426(欧拉函数)求∑i=2N−1∑j=i+1Ngcd(i,j)\sum_{i=2}^{N-1}\sum_{j=i+1}^Ngcd(i,j)i=2∑N−1​j=i+1∑N​gcd(i,j)一开始想过用莫比乌斯反演做…然而做不出来。解:∑i=1N−1∑j=i+1Ngcd(i,j)=∑i=2N∑j=1i−1gcd(i,j)\sum_{i=1}^{N-1}\sum_{j=i+1}^Ngcd(i,j)=\sum_{i=2}^N\sum_{j=1}^{i-1}gcd(i,j)i=1∑N−1​j=i

2021-03-05 20:41:05 168

原创 LightOJ 1336

LightOJ 1336题目:求1-n中σ(x)\sigma(x)σ(x)为偶数的个数,其中σ\sigmaσ为约数和函数。对任意正整数n有,n=p1a1p2a2p3a3...pnann=p_1^{a_1}p_2^{a_2}p_3^{a_3}...p_n^{a_n}n=p1a1​​p2a2​​p3a3​​...pnan​​σ(n)=(1+p1+p12+...+p1a1)(1+p2+p22+...+p2a2)...(1+pn+pn2+...+pnan)\sigma(n)=(1+p_1+p_1^2+...+

2021-03-02 15:45:02 151

原创 斐波那契数列以及Catalan数通项公式的推导

1、斐波那契数列的通项公式推导:已知斐波那契数列的递推公式为f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2)f(n)=f(n−1)+f(n−2)且f(0)=0,f(1)=1f(0)=0,f(1)=1f(0)=0,f(1)=1。设斐波那契数列的生成函数为F(x)F(x)F(x),F(x)=∑i=0nf(i)xiF(x)=\sum_{i=0}^nf(i)x^iF(x)=∑i=0n​f(i)xi。...

2021-02-22 16:47:45 1537 1

原创 已知x=a mod p,y=b mod p,求gcd(x,y) mod p的最大值

已知x≡a(modp),y≡b(modp)x\equiv a\pmod p,y\equiv b\pmod px≡a(modp),y≡b(modp)求d≡gcd(a,b)(modp)d\equiv gcd(a,b)\pmod pd≡gcd(a,b)(modp)最大值。p为素数已知x≡a(modp),y≡b(modp)x\equiv a\pmod p,y\equiv b\pmod px≡a(modp),y≡b(modp)求d≡gcd(a,b)(modp)d\equiv gcd(a,b)\pmod pd≡gcd

2021-02-15 14:22:57 218

原创 关于树状数

关于树状数组简介:树状数组一般用来维护一个序列的前缀和。在求前缀和的时间复杂度为O(logn),支持单点修改,区间修改,区间求和。不妨用T标识树状数组,a表示原数组。对于T[i],T[lowbit(i)]是T[i]的父亲节点,父亲节点维护着其子树的和。inline int lowbit(int x){return x&(-x);}对于建树,每次只需要更新其父亲节点即可。时间复杂度O(n)void build(int a[],int T[]){ for(int i=1;i<=n;

2021-01-17 16:31:24 146

原创 TJOI 2017 (Pollard_rho,MR素数测试)

TJOI 2017 (Pollard_rho,MR素数测试)题目链接题意是求分数BA\frac{B}{A}AB​在模M下的逆元,没有则输出-1。本题的两大核心是:Pollard_rho算法,和MR素数测试算法。BA\frac{B}{A}AB​在模M下有逆元当且仅当gcd(A,M)=1gcd(A,M)=1gcd(A,M)=1,因为分数不是最简的,所以只要分数可以化简到B′A′\frac{B'}{A'}A′B′​,其中gcd(A′,M)=1gcd(A',M)=1gcd(A′,M)=1即有逆元。我一开始

2020-12-13 17:18:00 170

原创 Timus 1673(反欧拉函数)

Timus 1673(反欧拉函数)题目链接有题意可知,设第i个教授掌管的实验室编号为index,则满足index≡i(modN)index\equiv i\pmod Nindex≡i(modN);对于第k个同学,只去编号为index′=kx(k≥1)index'=kx(k\ge 1)index′=kx(k≥1)的实验室。如果第k个同学要获得考试资格,则满足如下同余方程组{kx1≡1(modN)kx2≡2(modN)...kxN≡N(modN)\left\{\begin{matrix} kx_1\eq

2020-12-08 16:44:32 469

原创 Codeforces Round #290 (Div. 2) D

Codeforces Round #290 (Div. 2) D题目要求满足如下约束条件的元组(l1,l2,l3,…,li)(l_1,l_2,l_3,\dots,l_i)(l1​,l2​,l3​,…,li​):l1x1+l2x2+l3x3+⋯+lixi=1l_1x_1+l_2x_2+l_3x_3+\dots+l_ix_i=1l1​x1​+l2​x2​+l3​x3​+⋯+li​xi​=1使得函数F=∑i=1nciF=\sum_{i=1}^{n}c_iF=∑i=1n​ci​最小化。说人话就是找到若干个数

2020-12-05 16:01:47 198

原创 SDOI 2016 排列计数

SDOI 2016 排列计数题目链接设满足题目条件且长度为n恰好有m个数稳定的序列数为ans(n,m)ans(n,m)ans(n,m)那么易得题目答案ANS可表示为:ANS=ans(n,m)=C(n,m)∗ans(n−m,0)ANS=ans(n,m)=C(n,m)*ans(n-m,0)ANS=ans(n,m)=C(n,m)∗ans(n−m,0)因为题目规定n,m≤1e6n,m\le1e6n,m≤1e6,所以C(n,m)可以通过预处理阶乘+乘法逆元快速求得。至于ans(n-m,0),又被称作为全错

2020-12-04 11:32:43 171

原创 NOI 2018 屠龙勇士(exCRT)

NOI 2018 屠龙勇士(exCRT)题目链接根据题目。对于每一条龙,设其血量为a,回血量为p。选择武器的攻击力为ATK,攻击的最少次数为x。可以得到同余方程:ATK⋅x≡a(modp)ATK\cdot x\equiv a\pmod pATK⋅x≡a(modp)这个方程也等价于ATKgcd(ATK,p)⋅x≡agcd(ATK,p)(modpgcd(ATK,p))\frac{ATK}{gcd(ATK,p)}\cdot x\equiv \frac{a}{gcd(ATK,p)}\pmod {\fra

2020-11-28 21:20:43 239

原创 扩展中国剩余定理(EXCRT)

扩展中国剩余定理(EXCRT)中国剩余定理可以解形如下面的一元线性同余方程组:{ans≡x1(moda1)ans≡x2(moda2)ans≡x3(moda3)...ans≡xn(modan) \left\{\begin{matrix}ans\equiv x_1\pmod{a_1} \\ans\equiv x_2\pmod{a_2} \\ ans\equiv x_3\pmod{a_3}\\.\\.\\.\\ans\equiv x_n\pmod{a_n}\end{matrix}\right.

2020-11-27 14:58:49 271

原创 二次剩余与Cipolla算法

二次剩余与Cipolla算法若存在x,使得x2≡a(modp)x^2\equiv a \pmod{p}x2≡a(modp)成立且a不是p的倍数,则称a为模p的二次剩余。下文只讨论p为奇素数的情况。1、模p二次剩余的个数对于一个素数p,p的二次剩余有(p-1)/2个,非二次剩余有(p-1)/2个。因为有(p−x)2≡x2(modp)(p-x)^2\equiv x^2 \pmod{p}(p−x)2≡x2(modp),所以在[1,(p-1)/2]范围内即可得到模p的所有二次剩余数,只需要证明在[1,

2020-11-24 23:33:28 628

原创 关于BSGS算法

关于BSGS算法文章中提到的p,如果不加说明则默认为素数。BSGS算法适用于在求解形如ax≡b(modp)a^x\equiv b \pmod pax≡b(modp)的不等式。可知0≤x<p0\le x<p0≤x<p,那么可以令x=A⌈p⌉−B,0<=A,B<=⌈p⌉x=A\lceil\sqrt{p}\rceil-B,0<=A,B<=\lceil\sqrt{p}\rceilx=A⌈p​⌉−B,0<=A,B<=⌈p​⌉所以原问题转换成aA⌈p⌉−B

2020-11-14 18:27:09 297

原创 Miller-Rabin随机性素数测试方法

关于素数测试素数测试就是判断一个整数是素数还是合数。一般判断素数p的方式是通过判断2到根号p内的整数是否可以整除p来实现。时间复杂度为O(p1/2)。如果p是一个m位二进制整数,m=floor(Ig(p+1)),O(p1/2)=O(2m/2)。然而对于大整数而言,这样的时间复杂度显然是不可以接受的。费马小定理:if n is prime   ∀a∈Zn∗ , an−1≡1(modn)if\space n\space is\

2020-10-24 17:06:53 457 1

原创 Candy UVA 1639 (数学期望)

Candy UVA 1639 (数学期望)有两个盒子各有n颗糖(n<=2*105),从两个盒子取糖的概率为p和1-p,直到一个盒子没糖,求另一个盒子中糖的个数的数学期望。期望公式为:E=∑i=1ni∗E(i)=∑j=0n(n−j)∗Cn+jj[pn+1∗(1−p)j+(1−p)∗pj]E=\sum_{i=1}^{n}i*E(i)=\sum_{j=0}^{n}(n-j)*C_{n+j}^{j}[p^{n+1}*(1-p)^{j}+(1-p)*p^{j}]E=i=1∑n​i∗E(i)=j=0∑n​(

2020-10-18 15:04:06 157

原创 关于组合数取模

关于组合数取模对于C(n,m) mod p (m<=n)1、如果n,m比较,1<=m<=n<=1000,p<=1e9可以用杨辉三角递推式去解决,用C[n][m]来储存C(n,m)的值,则递推式为:C[i][j] mod p=(C[i-1][j-1]+C[i-1][j]) mod p(1<=j<=i) C[i][0]=12、如果n,m较大,p较小(1<=m<=n<=1e18,p<=1e5 and p is prime)可以用Luca

2020-10-17 11:40:43 223 1

原创 UVA 1637 NEERC 2005 (全概率公式)

UVA 1637 NEERC 2005 (全概率公式)首先熟悉概率公式的定义:P(A)=P(A|B1)*P(B1)+P(A|B2)*P(B2)+P(A|B3)*P(B3)+…+P(A|Bn)*P(Bn),其中B1∪B2∪…∪Bn构成事件空间的全集。这道题的意思是,有36张牌,分成9叠,每叠4张,每次可以任从两叠的顶端取两张相同的牌,直到取完即为成功,如果当前情况有有种选择,每种选择的概率的相等的,求成功的概率。我们可以用一个九元组<a1,a2,…,a9>表示当前的状态,其中ai表示第i叠

2020-10-11 15:07:16 149

原创 关于概率的一些事(对于贝叶斯公式的一些初级理解)

关于概率的一些事条件概率公式:P(A|B)=P(AB)/P(B)- - -111当A,B事件相互独立时,有P(AB)=P(A)*P(B)P(B|A)=P(AB)/P(A)- - -222联立111,222式,可得P(A|B)=P(A)*P(B|A)/P(B)- - -333333式也叫贝叶斯公式。其中P(A)也叫先验概率(Prior probability),即在不知道B事件发生前,对A事件的一个主观评估的概率;P(A|B)也叫后验概率(Posterior probability),即在发

2020-09-29 21:07:21 322

原创 UVA 10820 Send a Table (欧拉函数)

UVA 10820 Send a Table (欧拉函数)输入n,对于整数x,y(1<=x,y<=n),f(x,y)=f(kx,ky),k式正整数。所以可以用过f(x,y)的性质对函数表进行化简。问在[1,n]内最简的整数表有多少个元素。问题的实质是求在[1,n]内有多少对互素的整数,因为如果x,y不互质,那必然存在因子k,满足f(x’,y’)=f(kx’,ky’)。对于欧拉函数F,F(x)的值就表示小于n且与n互素的数的个数。欧拉函数F的表达式可以由相容排斥原理得到,且可以化为下面的

2020-09-27 21:10:16 144 1

原创 UVA 1635 Irrelevant Elements (唯一分解定理+组合数的递推公式)

UVA 1635 Irrelevant Elements (唯一分解定理+组合数的递推公式)给出n个数a1,a2,…,an,相邻两个数两两相加直到合并成一个数A,问A/m的结果与a1,a2,…,an哪些数无关。显然题目要找的是对于A=c1a1+c2a2,…,cnan,有哪些ai前面的系数是可以被m整除的。且可以发现对于ai前面的系数ci=C(n-1,i-1),因为当n较大时,组合数会很大以至于long long都存不下,所以可以根据组合数的递推公式,得到组合数的素因子分解式,来判断当前系数是否可以被m

2020-09-27 11:04:22 156

原创 UVA 12716 GCD XOR(数论)

UVA 12716 GCD XOR(数论)给出n(1<=n<=3e7), 在[1,n]内有多少对整数对,满足gcd(a,b)=a XOR b异或的性质:有 a xor b =c, 则 a xor c =b可以证得,对于a>=b 有 a-b<=a xor b又因为c是a,b得约数,所以有 c<=a-b得 c<=a-b<=a xor b若 a xor b = c ,则必有a-b=c通过枚举c,通过与素数筛类似的方法得到以c为约数的合数a,再得到b =a

2020-09-26 13:59:08 179

原创 UVA 12169 Disgruntled Judge (扩展欧几里得算法)

UVA 12169 Disgruntled Judge (扩展欧几里得算法)给出3个整数x1,a,b。根据递推公式xi=(a*xi-1+b) mod 10001来构造了长度为2T的数列。给出x1,x3,x5…x2T-1,求出x2,x4,x6…x2T.根据题意,有:x2=(ax1+b)%mod - - - 111x3=(ax2+b)%mod - - - 222令n=mod由111得x2和ax1+b同余,所以x2-(ax1+b)=ny1 - - -333由222得x3和ax2+b同余,所以x3-(

2020-09-23 14:30:32 146

原创 UVA 11582 Colossal Fibonacci Numbers(数论)

UVA 11582 Colossal Fibonacci Numbers(数论)给定a,b(0<=a,b<264)和正整数n(1<=n<=1000),求f(ab)modn,其中f(x)是斐波那契数列。根据斐波那契数列的定义和模运算的性质可知:有f(n) mod n=f(n-1) mod n+f(n-2) mod n,不妨令F(n)=f(n) mod n当<F(n-1),F(n)>二元组第二次出现时,前面的项构成了F(x)数列的最短循环节。之后只用求F(abmod

2020-09-22 16:48:17 120

原创 UVA 658 It‘s not a Bug,it‘s a Feature(单源最短路,Dijkstra)

UVA 658 It’s not a Bug,it’s a Feature(单源最短路,Dijkstra)有n(n<=20)个潜在bug和m(m<=100)个补丁,每个补丁用两个长度为n的字符串表示,分别代表该补丁的前置环境和安装补丁后的状态。在第一个表示前置环境的字符串中,0代表该位对应的Bug可有可无,+表示必须有该Bug,-表示必须没有该Bug;在第二个表示安装补丁后的状态的字符串内,0代表该Bug不变,+表示增加了该位Bug,-表示修复了该位Bug。之前在动态规划中有过用二进制表示

2020-09-09 16:30:49 163

原创 UVA 1151 Buy or Build(最小生成树,Kruskal)

UVA 1151 Buy or Build(最小生成树,Kruskal)对于n(1<=n<=1000)个点,q(0<=q<=8)个套餐,如果直接建边并枚举套餐的话,每次Kruskal算法要处理的节点数就会高达O(n2)个,那么整个算法的时间复杂度就高达O(2q n2+n2logn2)。其中O(n2logn2)是排序的时间复杂度。为了降低时间复杂度,可以先通过Kruskal算法在不选套餐的情况下生成最小生成树,那么剩下的边只有n-1个,那么后面只需要处理这n-1条边和套餐里的边,算

2020-09-06 10:47:37 146

原创 UVA 12219 Common Subexpression Elimination

UVA 12219 Common Subexpression Elimination解题的第一步显然是构建表达式树,因为题目保证运算符均为二元的,所以该表达式树是一颗二叉树,本题要求建树的时间复杂度为O(n)。故使用pos变量作为指针在字符串上移动,根据’('符号进行递归建树。在对于重复子树的判断上,建议使用unordered_map,unordered_map本质上是一个哈希表,在没有顺序要求的情况下,仅进行简单的查找操作最高可达到O(1)的时间复杂度,这取决于哈希的优秀性。用编码的方式给每个子树赋

2020-09-03 19:00:24 174

原创 UVA 1412 Fund Management (复杂状态的DP,状态池)

UVA 1412 Fund Management (复杂状态的DP,状态池)受到前面题目的影响,一开始的思路是用d(i,s)表示经过第i天后,选择了集合s里面的股票的当前最大现金。但是发股票可以选多手,根本无法用集合表示。由于每只股票的可持有的手数为(0<=ki<=8),最多有8只股票,所以表示当前手持股票资产的理论状态数最多有98<5*107种,但是由于还有一个持有总手数k的最大限制,实际状态数将远远低于这个值。实际状态数<1.5e4(我也不知道为什么)所以用d(i,p)表示

2020-08-15 18:06:18 244

原创 UVA 1252 Twenty Question (集合DP,时间优化)

UVA 1252 Twenty Question (集合DP,时间优化)用d(s,a)表示当前状体,集合s表示已询问的特征,集合a表示已询问的特征里面属于目标物w的特征,则集合a一定位s的子集。每一次询问对应着状态的转移,则可得到状态转移方程:d(s,a)=min(d(s,a),max(d(s+k,a+k),d(s+k,a))+1) ,k表示询问的特征。当有且仅有一个物体满足a集合中的所有特征,而不满足{s}-{a}中的所有特征,那么此时d(s,a)=0。有二项式定理可以得知,状态数有O(3m)个

2020-08-14 17:17:41 156

原创 UVA 10817 Headmaster‘s Headache(最优配对问题,DP,状态压缩)

UVA 10817 Headmaster’s Headache(最优配对问题,DP,状态压缩)题目大意:有m个在校老师,n个求职者,s个课程,给出每个人的工资和授课集合,在校老师必须聘请,每个课程匹配至少两名老师,求最少工资开销。咋一看,我的思路是用d(i,S)表示考虑前i个课程和集合S中的教师和求职者完成配对的最少工资开销,然后发现不行,状态转移表示不出来,而且集合无法用二进制表示。参考了紫书上的分析,我发现我还是太年轻了。紫书上用d(i,s1,s2),表示考虑了前i个人,集合s1表示当前状态有且仅

2020-08-12 13:27:07 264

原创 UVA 1218 Perfect Service (树上 DP)

UVA 1218 Perfect Service (树上 DP)本题的状态数较多,一个节点有三种状态表示(一开始我只想到两个):0、该节点不是服务器,该节点的父节点也不是服务器1、该节点是服务器。2、该节点不是服务器,该节点的父节点是服务器对于着三种状态,分别用d(u,0),d(u,1),d(u,2)表示对于以上三种状态进行分析,并写出状态转移方程1、对于第一种状态,则子节点里有且仅有一个为服务器。需要枚举每一个子节点为d(v,1),把其他子节点的d(v,0)相加。如果在每次枚举时进行计算,那

2020-08-10 11:54:18 113

原创 UVA1331 Minimax Triangulation (区间DP)

UVA1331 Minimax Triangulation (区间DP)本题属于最优三角剖分问题,用dp(i,j)表示在编号为i的顶点和编号为j的顶点间的最大三角面积的最小值。这样我们就可以得到状态转移方程dp(i,j)=min(max(dp(i,k),dp(k,j),S(i,k,j))),其中i<k<j知道三角形的三点坐标,可以用向量叉乘来求面积;知道三角形的三边长,可以用海伦公式求面积;本题需要注意的地方是,需要判断i-j是否是多边形的对角线(除了i=1且j=n的情况),我们可以

2020-08-07 17:25:22 175

原创 UVA 10003 Cutting Sticks (区间DP+四边形不等式)

UVA 10003 Cutting Sticks (区间DP+四边形不等式)这题是一个典型的区间DP的问题,用dp[i][j]表示区间i-j内的最优解,最终的答案是dp[0][n+1]状态转移方程为:dp[i][j]=min(dp[i][k]+dp[k][j]+该区间的木棍长度,dp[i][j])如果仅仅是区间DP,状态量为O(n2),每个状态的决策有O(n)个,则总的时间复杂度为O(n3)。如果通过四边形不等式优化状态的决策,可以将时间复杂度降低为O(n2)。使用四边形不等式的前提:1、d(

2020-08-05 16:59:28 210

原创 UVA1625 Color Length(线性DP

UVA1625 Color Length(线性DP)类似于LCS问题,可以用dp[i][j]来表示已选择序列1前i项和序列2前j项的最小目标函数值L( c )。显然,dp[0][0]=0;因为在选序列1第i个项的前提是前i-1个项必须被选择,序列2同理。所以dp[i][j]仅可能从dp[i-1][j]和dp[i][j-1]两种状态转移而来。对目标函数的处理,借鉴紫书上的方法:当把一个元素放到最终序列的时候,递增“已经出现但还未结束”的颜色的L( c )值。最初的想法是在每次状态转移的时候计算目标函

2020-08-04 20:32:39 190

原创 UVA 12563 (劲歌金曲)(多条件最优的动态规划问题)(01背包

UVA 12563 (劲歌金曲)(多条件最优的动态规划问题)(01背包)依照题意可知,首要条件是:在t-1的时间内唱最多的歌曲数目,次要条件是:在不超过t-1的时间内唱的最久。可以用dp_1[i]去表示在 i 时间内能唱的最多曲数。用dp_2[i]去表示在 i 时间内能唱的最久时间。状态转移的决策思想为:1、如果在 j 时间内唱当前歌曲比不唱当前歌曲有着更大的歌曲数,那么同时更新dp_1和dp_2的值。2、如果在 j 时间内唱当前歌曲和不唱当前歌曲有着一样的歌曲数,那么如果唱当前歌曲有着更长的唱

2020-07-31 19:34:41 304

原创 UVA1347(Tour)(DAG上的动态规划)

UVA1347(Tour)(DAG上的动态规划)本题的难点主要在于状态的定义,即如何去表示节点的状态。在紫书中,作者选择了dp(i,j)来表示第一个人走到了i点,第二个人走到了j点,且编号小于max(i,j)的节点都被走过。因为dp[i][j]和dp[j][i]是重复的,因此规定i>j。这样可以保证无后效性,因为小于max(i,j)的点都被选过了,接下来就是在大于max(i,j)里面选点,所以之后的状态不会影响到前面的状态。接下来考虑状态如何转移,由于状态的定义,下一步只能向编号大于i的节点移动

2020-07-30 11:22:16 289

空空如也

空空如也

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

TA关注的人

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