Description

  • \(n\in[1,500],k\in[2,10]\)。

Solution

  • 这是一道有点很有难度的题。

  • 先考虑判断一个数是否在数列\(a\)中。由于每次加的数是在\([0,k)\)的范围内,所以个位不定,但除个以外的位可以任意取值。
  • 考虑DP。记个位为第\(1\)位,设\(g_{i,p,x,a}\)表示我们构造的数第\(2\sim i\)位为0,第\(i\sim\infty\)位中最大的位值为\(p\),个位为\(a\),此时我们要将第\(i\)位刚好填到\(x\),个位变成了多少。
  • 初值的话,可以暴力算出\(i\in[1,2]\)时的\(g\)。
  • 不进位的转移显然。进位时,比如我们想算\(g_{i+1,p,1,a}\)的值,它可以由\(g_{i,k-1,1,a'}\)转移而来(\(a'\)表示我们在第\(i\)位填\(k-1\)次\(1\)后\(a\)会变成的数)。

  • 然后做树形DP。如果我们沿着子树节点序列转移,那么实际上就是沿着dfs序转移,可以转移到\(dfn[i]\)的范围是\([dfn[fa[i]],dfn[i])\)。
  • 设\(dp_{dfn[x],j,p,a}\)表示我们做到点\(x\),考虑到第\(j\)位(第\(j\)位放\(d[x]\)),前面的位的最大值为\(p\),个位为\(a\)的合法方案数。初值显然是\(dp_{1,j,d[1],g_{j,0,d[1],1}}=1\)。
  • 转移的话,一定是从\(dp_{i',j,p,x}\)转移到\(dp_{i,j-1,max(p,d),g_{j-1,p,d,x}}\),其中\(i'<i\)。这个可用前缀和优化。

  • 时空复杂度:\(O(nk^2(n+k))\)。

Code

#include <cstdio>
#include <cstring>
#define max(x,y) ((x)>(y)?(x):(y))
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;const int N=505,K=11,mo=998244353;int n,k,g[N][K][K][K],u,d[N],x,y,ti,dfn[N],dp[N][N][K][K],ans;
bool e[N][N];void P(int&x,int y) {x=(x+y)%mo;}void dfs(int u,int fa)
{if(!ti++)fo(j,1,n){int x=g[j][0][d[u]][1];dp[ti][j][d[u]][x]=1;}elsefo(j,2,n) fo(p,0,k-1) fo(x,0,k-1){int p1=max(p,d[u]), x1=g[j-1][p][d[u]][x];if(~x1) P(dp[ti][j-1][p1][x1],(mo+dp[ti-1][j][p][x]-dp[dfn[fa]-1][j][p][x])%mo);P(dp[ti][j-1][p][x],dp[ti-1][j-1][p][x]);}fo(x,d[u],k-1) P(ans,(mo+dp[ti][1][x][d[u]]-dp[ti-1][1][x][d[u]])%mo);dfn[u]=ti;fo(v,1,n) if(v^fa&&e[u][v]) dfs(v,u);
}int main()
{freopen("buried.in","r",stdin);freopen("buried.out","w",stdout);scanf("%d%d",&n,&k);memset(g,-1,sizeof g);fo(p,0,k-1){g[1][p][0][0]=0;fo(x,0,k-1)if(p|x){int y=x;while(y<k){g[1][p][y][x]=y;y+=max(p,y);}g[2][p][1][x]=y-k;}}fo(i,2,n)fo(p,0,k-1)fo(a,0,k-1){g[i][p][0][a]=a;if(!~(u=g[i][p][1][a])) continue;fo(x,2,k-1) if(!~(u=g[i][p][x][a]=g[i][max(p,x-1)][1][u])) break;if(~u) g[i+1][p][1][a]=g[i][k-1][1][u];}fo(i,1,n) scanf("%d",&d[i]);fo(i,1,n-1) scanf("%d%d",&x,&y),e[x][y]=e[y][x]=1;dfs(1,0);printf("%d",ans);
}

转载于:https://www.cnblogs.com/Iking123/p/11626041.html

【GMOJ6377】幽曲[埋骨于弘川]相关推荐

  1. jzoj6377. 【NOIP2019模拟2019.10.05】幽曲[埋骨于弘川]

    题解 真的都快忘了. 首先,我们考虑排序,求出一个神奇的排列方式,也就是dfn序. 那么答案必定是在dfn序里面一些连续的段连接起来. 然后我们就判断这玩意儿是否满足在a里面出现过. 于是现在分两步走 ...

  2. 6377. 【NOIP2019模拟2019.10.05】幽曲[埋骨于弘川]

    题目 题目大意 有个无限长的数列an{a_n}an​,a1=1a_1=1a1​=1,an=an−1+maxdightk(an−1)a_n=a_{n-1}+maxdight_k(a_{n-1})an​= ...

  3. [从头读历史] 第246节 夏商与西周

    剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入元婴期的修炼后,日夜苦修,神通日进. 这日,忽然想起自己虽然神通大涨,却在人文涵养上始终无有寸进,不觉挂怀. 在和[工程师阿伟]商议后,决定先理清文 ...

  4. C语言文件英文,c语言文件操作(国外英文资料).doc

    c语言文件操作(国外英文资料) 韧仔欠鳖佳刀寺男拒姚友畔庶炳告舞漾容验熬销避暇庆茅奠哑栓障于筏茸兔厘万寿日击悯汤糠毛塞丈河汤忧寸绞忧择曹酪泛磋牵卧国叛株咙麓独檀烈钎熬酪夫栓线夹蔗屏矾疙陋柱狂茅悬匈队八 ...

  5. 画论80 钱杜《松壶画忆》

    [中国历代画论目录] 序 余少时居南湖上,门无杂宾,斋中收藏甚富.暇则恣意探讨,日与古人晤对,兴到下笔,颇不为时习所染.中年奔走四方,浮名缠缚,所经之地,乞笔墨者坌集,牵率酬次,故寄兴时绝少.六十后老 ...

  6. 惊艳!亚洲规模最大、标准最高的金融数据中心 |上证所金桥技术中心基地项目...

    上证所金桥技术中心基地项目,是目前亚洲金融行业规模最大.标准最高的新一代数据中心,主要由8栋数据中心机房楼. 2栋动力楼.1栋总降压站及3栋生产辅助楼.1栋行政办公楼等18个单体共同构成. 贴合数据的 ...

  7. java 汉字转拼音缩写_汉字转拼音 java 工具类

    package qing.huang; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import ...

  8. 数影周报:恶意插件可远程控制Google Chrome,Meta裁员超1.1万名员工

    本周看点:恶意插件可以远程控制Google Chrome:Meta裁员超1.1万名员工:马斯克大改推特或面临数十亿美元罚款:TikTok Shop美国站的卖家中心已可申请入驻:小冰公司宣布完成10 亿 ...

  9. 【IT竞技、IT 峰会】

    ACM-Association for Computing Machinery , 即美国计算机协会. ICPC-International Collegiate Programming Cont ...

最新文章

  1. python csv.reader参数指定
  2. day4(定义类,公有,私有方法,静态方法,原形方式的属性和方法)
  3. use 在php 用法中的总结
  4. 驱动中的资源共享和临界代码保护
  5. ServletContextAware、ServletRequestAware、ServletResponseAware、SessionAware
  6. linux eclipse 字体,linux下eclipse字体的调整
  7. 【软件工程基础】数独生成器以及解答器
  8. 证券交易2-券商柜台系统
  9. 基于STM32设计的校园一卡通项目-详解原理
  10. 中国标准走进国际视野,首个零信任国际标准的诞生往事
  11. 小单刷题笔记之鲁卡斯队列(浮点数比较)
  12. 风云编程python基础语法(1)
  13. Q4营收同比增长34.7%,Saleforces股价为何总停滞不前?
  14. ElasticSearch文档过期时间设置
  15. Opencv中Mat类详细解读(学习笔记)
  16. MBA-day25 最值问题-应用题
  17. Allegro ---检查Dummy Net 、Not a net和有命名但是其中一端未连接的网络
  18. java开发nao机器人,NAO机器人学习小计
  19. 什么是网络营销?网络营销简介
  20. 疫情之下「在家办公模式」开启,你该选择哪些远程协同工具?| 特稿

热门文章

  1. Swagger生成接口文档
  2. PYNQ实现HDMI输出显示图片
  3. 再见HTML ! 用纯Python就能写一个漂亮的网页
  4. uni-app教程二(微信开发者工具运行项目,icon字体使用,组件)
  5. 全球五大电信巨头宣布联手开发和融合4G技术
  6. 公开数据集集合MedMNIST和Chest x-rays14
  7. 20221122非累加的m3u8的ts切片列表的补全步骤
  8. 暑期项目实训:基于webgl(three.js)的牙科数据可视化展示
  9. matlab 矩阵转置,列、行翻转
  10. jquery的在线api