p1265

       突然想起来自己还有个博客要经常写。。

       昨天先是把《程序员的数学》看完了,好看是好看,但是编程用得上的很少我还都会。然后开始复习动态规划,翻看学长们的ppt,感觉学到了很多。

       做的前几道题都挺简单的,但是P1265就花了我一晚上时间,这里着重讲一波。

       刚开始觉得和之前差不多,写了个

                                        

然后把a[n][m]一输出,感觉挺对。但是输出位置我就很蒙蔽了。想了很久后认为要从根本处着手改一下(可能叫状态转移方程?),于是想到了新的方程

完美,这样就可以在更新状态的时候顺便判断要不要放进去。

这时候想起了学的并不是很好的并查集,决定试一下。

但是这样肯定也不对啊,比如第一个花瓶我输出哪个就不知道。

就又从头思考这个题,考虑从后往前判断不就好了,然后就这样搞了

第一排的预处理就不说了,flag先全部赋值成0用ans[0][i]保存位置,输出ans[n][m]和ans[0][i]就好了,感觉非常的对。

然后交上去发现有一组数据过不了,第三个应该输出12,但是我输出了20。看着一大群数据很尴尬,我也不能自己手算吧,输出一波ans[3][12]和ans[3][20]发现是一样的。那证明第三个花放在12与20是等价的,而题目要求字典序排列。

然后我就回寝想这个问题,怎么样保证合法还要输出字典序呢?然后今天早上起来坐在实验楼楼梯上睡觉的时候就想出来了。

哎呀我怎么这么机智,赶紧交上去了,然后来写博客。

       

原文地址:https://www.cnblogs.com/qywyt/p/8553362.html