ACM练级日志:“不作死就不会死” --HDU 4283 & 4284

4284是一道图论+搜索题……好吧,虽说标准解答是图论+DP题,h<=15似乎也在暗示着用二进制标记状态,但是我还是喜欢DFS,于是就去写DFS了。我最初的想法是求一下那15个点和1号点互相之间的最短路,用Dijkstra,然后上DFS做,但是一开始TLE,后来发现是Dijkstra里面数组初始化错了……之前以为是搜索太慢(15!),所以加了不少优化,结果还是TLE,就没想到居然是那儿的问题。改了之后直接用时缩短到200ms……但是WA了。我去了所有优化仍然找不出问题,不得不改用Floyd,结果一下就对了……


顺便说下Floyd的问题,之前一直记不住数组应该怎么初始化之类的细节问题,导致我一直不敢用,因为Floyd太精密了,那三个循环错一点就会跪,而且你还看不出来。特地在此记上:第一,直接在邻接矩阵map上搞就行;第二,一开始把map[i][j]都赋成INF;第三,顺序是kij(有其他的,不过就用这个吧),然后记得判ijk是否两两不等。


然后是4283,是个看起来很像NOIP风格的题目,100个人要上台,已经排好队了,每个人有个怒气值,越晚上怒气值越高,旁边有个栈型的小黑屋可以用来调整顺序。一开始兴冲冲地写了DFS,发现自己被坑了……因为一开始觉得复杂度是100^3,后来才发现是3^100…… 事实上n超过100的就别想搜索了;这题是区间DP,用到栈的先进后出性质,最关键的一点是要枚举第i个人第k个出场时,要把排在i前面的那堆人看做一个整体,后面的也看成一个整体,然后就变成 前--i--后,就好办了,子问题就出来了。


DP果然还是不擅长,然后以后不打算什么都往搜索上靠了……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值