DP
文章平均质量分 81
ModestCoder_
一个modest的coder
展开
-
【题解】LuoGu8816:[CSP-J 2022] 上升点列
本来我们是顺序选取物品,那么如果现在物品之间需要满足一种拓扑关系,或者是说想要选取物品b,必须先选取物品a这样的关系呢。这是一个树形dp,想要选课a,必须要选课b,将选课关系建成一棵树,做树形dp就是这道题目的做法。这道题物品之间只需要满足坐标不降,关联两个物品就需要欧几里得距离的重量,价值就是点数。这道题可以把课看成物品,课本身算作重量,一门课的重量就是“1”,物品的价值在这边就是课的得分,背包问题中是由。每个点就是一个物品,用的附加点的数量就是重量,能不能理解?都有背包问题的影子,都可以算作我提出的。原创 2023-01-12 11:19:21 · 771 阅读 · 0 评论 -
【题解】LOJ3254:「JOI 2020 Final」集邮比赛 3
原题传送门发现n<=200n<=200n<=200,那么我们就可以想一个O(n3)O(n^3)O(n3)的dp发现每次肯定是向左/右推进可以令dp[i][j][k][0/1]dp[i][j][k][0/1]dp[i][j][k][0/1]表示向起点左边推进了iii个,右边推进了jjj个,总共收集到了kkk个邮票,现在在起点左/右边直接转移Code:#include <bits/stdc++.h>#define maxn 210#define LL long lo原创 2020-12-04 11:28:34 · 370 阅读 · 0 评论 -
【题解】LuoGu4654:[CEOI2017]Mousetrap
原题传送门以陷阱为根建树首先是一个很重要的结论,抑或是一个性质假设现在是这样一个状态(命名为STA1),老鼠在一棵子树的根,这棵子树没有任何东西,老鼠所在的点与父亲的边是脏的(为什么会是脏的?因为老鼠刚从上面走下来)然后我们堵住一条边,老鼠会逃往一个它认为更优的地方我们再将一军好,现在,我们把老鼠堵在了某一个地方,老鼠动不了了,我们可以慢慢操作还可以推出更一般的情况,我们先堵住一个旁支,再擦干净一个地方,老鼠由于本能会走过去,然后那地方又脏了现在我们只用了4次操作将老鼠堵在了“起点”原创 2020-12-03 18:32:23 · 276 阅读 · 0 评论 -
【题解】LuoGu6359: [CEOI2018]Cloud computing
原题传送门用背包做,如果可以直接枚举物品以及核心数量复杂度是4000∗50∗2000=4e84000*50*2000=4e84000∗50∗2000=4e8差不多可以那么我们基本上就知道怎么做了想着怎么把fff的限制去掉可以直接按照fff从大到小排序,那么我们就能保证现在手里面拥有的肯定都可以用来做任务然后就做一个背包Code:#include <bits/stdc++.h>#define maxn 2010#define maxm 200010#define LL lon原创 2020-12-02 11:23:22 · 170 阅读 · 0 评论 -
【题解】LuoGu7074:方格取数
原题传送门普及的题目就直接秒杀了因为题目已经帮我们划好了dp的阶段,就是一列一列的走然后在一列里面可以分为向上走和向下走,那么我需要知道上一个阶段每个地方的最优值,用dp数组记录下来,很套路得转移就行了Code:#include <bits/stdc++.h>#define maxn 1010#define LL long longusing namespace std;const LL inf = 1e12;LL a[maxn][maxn], f[maxn], g[maxn原创 2020-11-30 19:52:55 · 246 阅读 · 0 评论 -
【题解】LuoGu4657:[CEOI2017]Chase
原题传送门扔磁铁得到的收益有两种情况我在起点,扔一个磁铁,周围的权值是收益,因为周围的那些铁块我肯定不会遇到,而追逐者肯定会遇到我从某一个点走过来,假设上一个点是红点,现在我在绿点,然后我扔了一个磁铁,我获得的收益是周围点的权值和减去红点的权值,因为我是经过了红点的,遇到过红点的铁块,而且追逐者也肯定会遇到所以一条路径上,扔磁铁获得的收益有两种情况而且我们可以发现,假如我从某一个点出发,一定要扔一个磁铁。或者说,我扔第一个磁铁的地方,一定是出发点思考树形dp,遍历到某个点uuu的时候,计算原创 2020-11-30 09:02:10 · 191 阅读 · 0 评论 -
【题解】LOJ2349:团子制作
原题传送门按照套路来的话按照中间点GGG来统计对于两个GGG,如果不在同一条对角线的相邻位置,是不会相互影响的所以根据dp的定义,我们以一条条对角线为阶段每个阶段,每个GGG按照不放,横放,竖放讨论转移Code:#include <bits/stdc++.h>#define maxn 3010using namespace std;char a[maxn][maxn];int n, m, ans;int get(){ char c = getchar(); for (原创 2020-11-20 21:34:44 · 199 阅读 · 0 评论 -
【题解】LuoGuU67070:二叉树阵
原题传送门卡特兰数暴力O(n2)O(n^2)O(n2)dp或者用O(n)O(n)O(n)跑公式Code:#include <bits/stdc++.h>#define maxn 1010#define LL long longusing namespace std;const LL qy = 998244353;LL dp[maxn];int n;int main(){ scanf("%d", &n); dp[0] = 1; for (int i = 1;原创 2020-11-03 20:57:50 · 115 阅读 · 0 评论 -
【题解】LuoGuU84033:败走
原题传送门30%部分O(nm)枚举正方形左上角,O(nm)枚举正方形右下角,O(nm)验证正方形是否合法总时间复杂度O(n^3m^3)可以过30分过水,过无脑,没有代码示例50%部分O(nm)枚举正方形左上角,O(n)枚举正方形边长,O(nm)验证正方形是否合法总时间复杂度O(n^3m^2)可以过50分具体见baoli.cpp100%部分简化题目,如果求最大的全是0的正方形,怎么做?想到dp设计状态dp[i][j]表示选择(i,j)这个点作为正方形的右下角能得到的最大正方形的边长原创 2020-11-03 20:39:03 · 89 阅读 · 0 评论 -
【题解】2020.11.2 B
高位贪心,逐位确定这个肯定是套路大方针对于每一个新来的,之前的答案肯定要满足然后用O(n2)O(n^2)O(n2)dp暴力验证时间复杂度O(qn2log2n)O(qn^2log^2n)O(qn2log2n)差不多要3.6s,很接近了,按照一般出题者的思路,接下来再优化一下首先O(n2)O(n^2)O(n2)跑不满,差不多可以少掉一半时间然后加一些inline,registerinline,registerinline,register之类的极限数据最多只要0.7sCode:#prag..原创 2020-11-03 10:19:05 · 125 阅读 · 0 评论 -
【题解】模拟赛:愤怒的元首
令dpidp_idpi表示iii个点的答案考虑枚举整个DAGDAGDAG有jjj个入度为0的点Cij∗2j(i−j)∗dpi−jC_{i}^{j}*2^{j(i-j)}*dp_{i-j}Cij∗2j(i−j)∗dpi−j意思是先从iii个点中选出jjj个入度为0的点,枚举这jjj个点与剩下的点中连边关系(指向他或不连),剩下的点自己是个DAGDAGDAG发现上面这个式子其实包含了至少jjj个入度为0的点,所以要容斥Code:#include <bits/stdc++.h>..原创 2020-11-01 18:53:49 · 175 阅读 · 0 评论 -
【题解】LuoGu6287:Mag
原题传送门结论:答案一定是某个点,或者一段1,或者一段1中间有个2某个点的情况不论,如果能有答案比单个点更优,一定满足上面的结论证明:1.11111(x个)311111(y个)1.11111(x个)311111(y个)1.11111(x个)311111(y个),总的值是3x+y+1\frac{3}{x+y+1}x+y+13,令x<=yx<=yx<=y,则还有一种情况是1y\frac{1}{y}y13x+y+1<1y,3y<x+y+1,2y<x+1\frac{原创 2020-10-28 11:29:24 · 171 阅读 · 0 评论 -
【题解】LuoGu6398:KOLEKCIJA
原题传送门先升序排序令dpidp_idpi表示包含这一个的答案dpi=min(dpj+max(k,ai−aj+1+1))(j<i)dp_i=min(dp_j+max(k,a_i-a_{j+1}+1))(j<i)dpi=min(dpj+max(k,ai−aj+1+1))(j<i)然后,求方案如果dpi−dpi−1=ai−ai−1dp_i-dp_{i-1}=a_i-a_{i-1}dpi−dpi−1=ai−ai−1,说明iii和i−1i-1i−1属于同一个区间所以可原创 2020-10-25 20:23:32 · 333 阅读 · 1 评论 -
【题解】LuoGu6858:深海少女与胖头鱼
原题传送门期望dpdpn,m=1+nn+mdpn+m−1,1+mn+mdpn,m−1dp_{n,m}=1+\frac{n}{n+m}dp_{n+m-1,1}+\frac{m}{n+m}dp_{n,m-1}dpn,m=1+n+mndpn+m−1,1+n+mmdpn,m−1然后发现无法实现经过部分分m=0m=0m=0启发又看见了n<=1014,m<=106n<=10^{14},m<=10^6n<=1014,m<=106猜想时间复杂度可能只与mmm有关d原创 2020-10-22 21:14:24 · 266 阅读 · 0 评论 -
【题解】CF1143B:Nirvana
原题传送门数位dpdpi,0/1dp_{i,0/1}dpi,0/1表示第i位,是否退位了dpi,0=dpi−1,0∗aidp_{i,0}=dp_{i-1,0}*a_idpi,0=dpi−1,0∗aidpi,1=max(9dpi−1,1,dpi−1,0∗(ai−1))dp_{i,1}=max(9dp_{i-1,1},dp_{i-1,0}*(a_i-1))dpi,1=max(9dpi−1,1,dpi−1,0∗(ai−1))可以把第一维弄掉然后初始化dp0=a1,dp1=max(1,原创 2020-10-18 14:15:16 · 175 阅读 · 0 评论 -
【题解】CF933A:A Twisty Movement
原题传送门就是按顺序先找一段全是1的子序列,再找一段全是2的子序列,再找一段全是1的子序列,再找一段全是2的子序列这样我们就找出了一段诸如111122221111222111122221111222111122221111222的子序列,把第二段和第三段翻转,得到111...111222...222111...111222...222111...111222...222,就是答案就是找出长度最长的四段和令sum1isum1_isum1i表示前缀1的个数sum2isum2_isum2i表示后缀2原创 2020-10-18 10:41:51 · 258 阅读 · 0 评论 -
【题解】LuoGu3239:亚瑟王
原题传送门令pip_ipi表示第iii个技能的概率ans=∑pi∗dians=\sum p_i*d_ians=∑pi∗di令dpi,jdp_{i,j}dpi,j表示前iii个技能,成功了jjj个的概率dpi,j=dpi−1,j∗(1−pi)r−j+dpi−1,j−1∗[1−(1−pi)r−j+1]dp_{i,j}=dp_{i-1,j}*(1-p_i)^{r-j}+dp_{i-1,j-1}*[1-(1-p_i)^{r-j+1}]dpi,j=dpi−1,j∗(1−pi)r−j+dpi−1,原创 2020-10-05 11:03:46 · 148 阅读 · 0 评论 -
【题解】CSP-S2019初赛:取石子
(取石子)Alice和Bob两个人在玩取石子游戏。他们制定了nn条取石子的规则,第ii条规则为:如果剩余石子的个数大于等于a[i]a[i]且大于等于b[ilb[il, 那么他们可以取走b[i]b[i]个石子。他们轮流取石子。如果轮到某个人取石子, 而他无法按照任何规则取走石子,那么他就输了。一开始石子有mm个。请问先取石子的人是否有必胜的方法?有两种做法暴力dp:dpidp_idpi表示iii是否必胜,对于一个规则(a,b)(a<=i),dpi∣=(dpi−b==0)(a,b)(a<=i原创 2020-09-30 21:46:28 · 2015 阅读 · 0 评论 -
【题解】LuoGu4284:[SHOI2014]概率充电器
原题传送门套路期望dp把每个点不被充电的概率ansians_iansi算出来,答案就是∑1−ansi\sum 1-ans_i∑1−ansi令fuf_ufu表示以uuu为根的子树,uuu不被充电的概率fu=(1−qu)∗∏(1−p(u,v)+p(u,v)∗fv)f_u=(1-q_u)*\prod (1-p(u,v)+p(u,v)*f_v)fu=(1−qu)∗∏(1−p(u,v)+p(u,v)∗fv)但是除了根节点,其他节点的答案都是不充分的,所以要换根dpgug_ugu表示每个点的真原创 2020-09-26 21:33:55 · 147 阅读 · 0 评论 -
【题解】CF1000G:Two-Paths
原题传送门这道题目和保卫王国非常的相似倍增dp记lll为w(u,v)w(u,v)w(u,v)fuf_ufu表示,从uuu出发回到uuu,走以uuu为根的子树的答案fu+=max(0,fv−2l)f_u+=max(0,f_v-2l)fu+=max(0,fv−2l)fau,ifa_{u,i}fau,i表示,从uuu,往上的第2i2^i2i个祖先dpu,idp_{u,i}dpu,i表示,从uuu跑到fau,ifa_{u,i}fau,i,中途可以跑子树的答案dpu,i=dpu,i−1+原创 2020-09-24 19:45:42 · 193 阅读 · 0 评论 -
【题解】LuoGu5202:USACO19JAN]Redistricting P
原题传送门这个是双关键字的单调队列记HHH为1,GGG为-1,统计前缀和暴力dpi=min(dpj+(sumi>=sumj))(i−j<=m)dp_i=min(dp_j+(sum_i>=sum_j))(i-j<=m)dpi=min(dpj+(sumi>=sumj))(i−j<=m)用单调队列维护,如何判断两个数在队列中的先后?对于两个数p,qp,qp,qdpp!=dpqdp_p!=dp_qdpp!=dpq,dpdpdp值小的那个优先dpp=dp原创 2020-09-20 18:31:19 · 206 阅读 · 0 评论 -
【题解】CF993D:Compute Power
原题传送门01分数规划∑a∑b<=mid\frac{\sum a}{\sum b}<=mid∑b∑a<=mid∑a<=mid∗∑b\sum a<=mid*\sum b∑a<=mid∗∑bwi=ai−mid∗biw_i=a_i-mid*b_iwi=ai−mid∗bi问是否存在∑wi<=0\sum w_i<=0∑wi<=0先根据aaa从大到小分组,相同的aaa一组,组内按照bbb升序这样满足严格小于的那个条件可以dpi,jdp_{i原创 2020-09-20 11:12:24 · 200 阅读 · 0 评论 -
【题解】CF922E:Birds
原题传送门这是一道背包问题dpidp_idpi表示共打了iii只鸟剩余最大魔法值每次走一棵树,所有dpdpdp值+X+X+X每次把鸟看成物品,二进制拆分做01背包Code:#include <bits/stdc++.h>#define maxn 1010#define maxm 10010#define LL long longusing namespace std;LL W, B, X, cost[maxn], power[25], c[maxn], dp[maxm],原创 2020-09-18 21:32:20 · 230 阅读 · 0 评论 -
【题解】CF906C:Party
原题传送门状压01状态中所有1表示互相认识staista_istai表示初始iii的交际圈,如果iii在状态JJJ中,可以直接把staista_istai的状态直接并入JJJ,表示选择iii,把他认识的人都互相认识一遍然后记录路径,idJid_JidJ表示该状态是通过选择idJid_JidJ这个人来的,preJpre_JpreJ表示上个状态Code:#include <bits/stdc++.h>#define maxn 5000010#define maxm 25u原创 2020-09-16 21:26:33 · 247 阅读 · 0 评论 -
【题解】UVA10271:佳佳的筷子 Chopsticks
@luogu贪心策略,如果知道当前一组筷子最小的那根,那么与他组合的肯定是与他相邻的,然后剩下那根最长的不用管dpi,jdp_{i,j}dpi,j表示组了jjj组筷子,最后一组最短的筷子是第iii根,倒着推导dpi,j<−−−(ai−ai+1)2+dpi+2,j−1dp_{i,j}<---(a_i-a_{i+1})^2+dp_{i+2,j-1}dpi,j<−−−(ai−ai+1)2+dpi+2,j−1这样其实转移意义不明,换言之会有漏掉,可以改变定义,当前用了i−ni-n原创 2020-09-16 20:54:11 · 400 阅读 · 0 评论 -
【题解】Kronican
题目描述Mislav有N个无限体积的杯子,每一个杯子中都有一些水。Mislav想喝掉所有的水,但他不想喝超过K杯水。Mistrav能做的就是将一个杯子中的水倒入另一个杯子中。 不幸的是,挑选哪两个杯子进行倒水操作对Mislav来说很重要,因为并非所有的杯子都离他一样远。更准确地说,从i号杯子向j号杯子倒水所付出的代价为Cij。 帮助Mislav找到他需要付出的总代价的最小值。输入格式第一行输入包含整数N和K(1≤K≤N≤20)。表示水杯的总数和Mislav最多能喝多少杯。 接下来N行每行包含N个整数C原创 2020-09-16 11:10:42 · 272 阅读 · 0 评论 -
【题解】UVA1252:Twenty Questions
@vjudge状压可以这样设计状态dfs(s,a)dfs(s,a)dfs(s,a)表示当前已经猜测的集合,目前还没有确定的数在sss集合里面的共同特征为aaa,还要猜几次枚举下一次猜的位为kkk对于当前状态的答案是sum=max(dfs(s∣2k,a),dfs(s∣2k,a∣2k))+1sum=max(dfs(s|2^k,a),dfs(s|2^k,a|2^k))+1sum=max(dfs(s∣2k,a),dfs(s∣2k,a∣2k))+1对于每个kkk,取答案的最小值至于边界,若满足状态(s原创 2020-09-13 15:34:04 · 202 阅读 · 0 评论 -
【题解】UVA1633:Dyslexic Gollum
@vjudge只要保证不出现长度为kkk或k+1k+1k+1的回文串就可以状压保存最后kkk位的状态,每次转移时判断一下是否合理就好了Code:#include <bits/stdc++.h>#define maxn 410#define maxm 2010#define qy 1000000007using namespace std;int power[25], n, m, dp[maxn][maxm];inline int read(){ int s = 0, w原创 2020-09-13 14:24:45 · 229 阅读 · 0 评论 -
【题解】LuoGu3943:星空
原题传送门因为这个k<=8k<=8k<=8所以想到状压主要思想是差分令灯暗为1,灯亮为0比如一行灯的情况是a:01001100a:01001100a:01001100那么对应差分数组就是b:011010100b:011010100b:011010100可以发现ai=b1xorb2xor...xorbia_i=b_1xorb_2xor...xorb_iai=b1xorb2xor...xorbi然后我对于区间[l,r][l,r][l,r]进行反转操作,在差分数组里的表原创 2020-09-09 16:24:51 · 189 阅读 · 0 评论 -
【题解】LuoGu1433:吃奶酪
原题传送门因为n<=15n<=15n<=15,所以状压dpi,jdp_{i,j}dpi,j表示跑过的点状态为iii,当前在jjjdpi∣(1<<(k−1)),k=min(dpi,j+dis(j,k))dp_{i|(1<<(k-1)),k}=min(dp_{i,j}+dis(j,k))dpi∣(1<<(k−1)),k=min(dpi,j+dis(j,k))Code:#include <bits/stdc++.h>#define原创 2020-09-06 18:31:15 · 168 阅读 · 0 评论 -
【题解】LuoGu6007:[USACO20JAN]Springboards G
原题传送门显然可以枚举提到过的点若一个点iii,是一个跳板的终点,那么dpi=dpj(j是该跳板的起点)dp_i=dp_j(j是该跳板的起点)dpi=dpj(j是该跳板的起点)一般地,有dpi=min(dpj+dis(i,j))(dis(i,j)=xi+yi−xj−yj)dp_i=min(dp_j+dis(i,j))(dis(i,j)=x_i+y_i-x_j-y_j)dpi=min(dpj+dis(i,j))(dis(i,j)=xi+yi−xj−yj)这是个O(n2)O(n^2)O(原创 2020-09-06 11:15:21 · 289 阅读 · 0 评论 -
【题解】CF238C:World Eater Brothers
原题传送门大意是改变最少的边的方向使得选两个点,能遍历完整棵树考虑枚举两个起点。对于一个起点,用树形dp计算出dpudp_udpu表示以uuu为根的子树的答案然后若以uuu作为真正的起点,那么答案就是dpudp_udpu如果选择uuu子树中的某个点vvv作为起点,那么答案是dpu−(u−>v反向的边)+(u−>v正向的边)dp_u-(u->v反向的边)+(u->v正向的边)dpu−(u−>v反向的边)+(u−>v正向的边)发现所以维护−(u−>v原创 2020-09-03 21:25:20 · 188 阅读 · 0 评论 -
【题解】CF1025D:Recovering BST
原题传送门首先会想到一个朴素的暴力dpi,j,kdp_{i,j,k}dpi,j,k表示区间[i,j][i,j][i,j]根为kkk是否可行,枚举两边子树的根复杂度O(n4)O(n^4)O(n4)这是逆推dp,一般逆推不行,可以想一想顺推对于一个区间[i,j][i,j][i,j],它的父亲只能为i−1或j+1i-1或j+1i−1或j+1,可以枚举区间[i,j][i,j][i,j]以及区间的根kkk,往[i−1,j],[i,j+1][i-1,j],[i,j+1][i−1,j],[i,j+1]两个状态原创 2020-09-01 20:41:07 · 186 阅读 · 0 评论 -
【题解】CF1101D:GCD Counting
原题传送门发现要是两个数gcd>1gcd>1gcd>1,其实只需要关注他俩是否有质数公因数对于每个数暴力分解质因数,树形dpdpu,idp_{u,i}dpu,i表示点uuu为根,第iii个质因数的最长链ans=max(dpu,i+dpv,j)(fav=u,primeu,i=primev,j)ans=max(dp_{u,i}+dp_{v,j})(fa_v=u,prime_{u,i}=prime_{v,j})ans=max(dpu,i+dpv,j)(fav=u,primeu,原创 2020-08-31 21:04:34 · 175 阅读 · 0 评论 -
【题解】LuoGu4161:[SCOI2009]游戏
原题传送门对于一个大小为xxx的循环节,经过kxkxkx次变换后不变所以一种排列的变幻数为所有循环节大小的最小公倍数问题转化成了求有多少个s=[x1y1,x2y2,x3y3,...,xnyn]满足(x1,x2,x3,...,xn)=1,x1y1+x2y2+x3y3+...+xnyn<=ns=[x1^{y1},x2^{y2},x3^{y3},...,xn^{yn}]满足(x1,x2,x3,...,xn)=1,x1^{y1}+x2^{y2}+x3^{y3}+...+xn^{yn}<=ns=[x原创 2020-08-30 12:08:48 · 734 阅读 · 0 评论 -
【题解】LuoGu4158:粉刷匠
原题传送门很好的一个dp令fi,jf_{i,j}fi,j表示前iii行刷了jjj次的答案,gi,j,kg_{i,j,k}gi,j,k表示第iii行前kkk个,刷了jjj次的最大价值fi,j=max(fi−1,j−k+gi,k,m)f_{i,j}=max(f_{i-1,j-k}+g_{i,k,m})fi,j=max(fi−1,j−k+gi,k,m)gi,j,k=max(gi,j−1,l+max(sumi,k−sumi,l,(k−l)−(sumi,k−sumi,l)))g_{i,j,k}=m原创 2020-08-29 19:30:59 · 249 阅读 · 0 评论 -
【题解】LuoGu2254:[NOI2005]瑰丽华尔兹
原题传送门首先还是暴力dpdpt,x,ydp_{t,x,y}dpt,x,y表示时间ttt,位置(x,y)(x,y)(x,y)的答案dpt,x,y<−−−dpt−1,x,ydp_{t,x,y}<---dp_{t-1,x,y}dpt,x,y<−−−dpt−1,x,ydpt,x,y<−−−dpt−1,lstx,lsty+1dp_{t,x,y}<---dp_{t-1,lstx,lsty}+1dpt,x,y<−−−dpt−1,lstx,lsty+1复杂度是O原创 2020-08-29 13:43:12 · 226 阅读 · 0 评论 -
【题解】NOIp模拟:守卫者的挑战
题目描述打开了黑魔法师 Vani 的大门,队员们在迷宫般的路上漫无目的地搜寻着关押 applepi 的监狱的所在地。突然,眼前一道亮光闪过。“我,Nizem,是黑魔法圣殿的守卫者。如果你能通过我的挑战,那么你可以带走黑魔法圣殿的地图„„”瞬间,队员们被传送到了一个擂台上,最初身边有一个容量为 K 的包包。擂台赛一共有 N 项挑战,各项挑战依次进行。第 i 项挑战有一个属性a_iai ,如果a_i \ge 0ai ≥0,表示这次挑战成功后可以再获得一个容量为a_iai 的包包;如果原创 2020-08-27 16:26:29 · 359 阅读 · 0 评论 -
【题解】LuoGu1776:宝物筛选
原题传送门暴力dpdpi,j=max(dpi−1,j−w∗k+v∗k)dp_{i,j}=max(dp_{i-1,j-w*k}+v*k)dpi,j=max(dpi−1,j−w∗k+v∗k)可以用倍增思想, 把物品用二进制分组比如9−>1,2,4,29->1,2,4,29−>1,2,4,2这样在复杂度里面可以把一个mmm优化成logmlogmlogm复杂度满足Code:#include <bits/stdc++.h>#define maxn 110#defi原创 2020-08-27 14:22:40 · 153 阅读 · 0 评论 -
【题解】NOIp模拟:数字
数字(num.c/cpp/pas)【问题描述】一个数字被称为好数字当他满足下列条件:1. 它有2*n个数位,n是正整数(允许有前导0)。2. 构成它的每个数字都在给定的数字集合S中。3. 它前n位之和与后n位之和相等或者它奇数位之和与偶数位之和相等例如对于n=2,S={1,2},合法的好数字有1111,1122,1212,1221,2112,2121,2211,2222这样8种。已知n,求合法的好数字的个数mod 999983。【输入格式】第一行一个数n。接下来一个长度不原创 2020-08-26 14:23:28 · 394 阅读 · 0 评论