标签:min CF232C Doe fib Graphs dp
CF232C Doe Graphs
一看到题第一时间想到的大概是点的个数满足斐波那契数列的关系,即\(fib_i=fib_{i-1}+fib_{i-2}\),在题目中可以得知\(fib_{0}=1,fib_{1}=2\)(这里的\(fib_{i}\)即为文中的\(D_{i}\))
然后考虑怎么求第n次的i到j的距离呢?自然想到这可能和上一次有关系,那么有什么关系呢?我们自然而然想到了递推(不习惯用f,这里用dp取代)
设\(dp_{n,i,j}\)表示第n层,从i到j至少需要走的路径长度,然后考虑它怎么转移
下面分三种情况:
- \(i,j≤fib_{n-1}\),即两个点都在第\(n-1\)的图上,这时候考虑\(dp_{n,i,j}\)等于什么,显然得出\(dp_{n,i,j}=min{dp_{n-1,i,j}\) //即直接从这两个点走,不经过第n层新增的点
\(,min{dp_{n-1,1,i}+dp_{n-1,j,fib_{n-1}}+2,dp_{n-1,i,fib_{n-1}}+dp_{n-1,1,j}+2}\) //即经过新加的\(1,fib_{n-1}+1\)和\(fib_{n-1},fib_{n-1}+1\)的边
- \(i≤fib_{n-1},j>fib_{n-1}\) 可以试想把j移到j-fib_{n-1}的位置,即原图形的镜像位置(莫名皇室)
这个玩意儿愿读者自行画图理解那么它经历什么呢,显然是\(min{dp_{n-1,1,i},dp_{n-1,i,fib_{n-1}}}\) //即i点到1或者$fib_{n-1}的距离
+dp_{n-2,1,j-fib_{n-1}}+1 //即j点到1点的距离
若i,j相反则swap一下即可
- \(i>fib_{n-1},j>fib_{n-1}\) 其实此时的位置就相当于它与第\(n-1\)层的镜面位置
\(dp_{n,i,j}=dp_{n-2,i-fib_{n-1},j-fib_{n-1}}\)
此时处理好了dp,如果你这是以为大功告成了,那我告诉你你想多了
标签:min,CF232C,Doe,fib,Graphs,dp 来源: https://www.cnblogs.com/sunyx20060115/p/14961605.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。