摘要: 思路:这题的感觉就是最长上升子序列的升级版。首先对于最长上升子序列要用n*log(n)的算法才行,这个复杂度的算法可以从hdu1025得到启发。然后就是什么情况下最优问题了。对于序列中某个数i,找出其后面最长不下降子序列长度和最长不上升子序列长度,将这两个长度加起来,最大的就是我们要找到。但由于存在相同值,那么我么就要确定这两个子序列中值为i的个数最少的那个,用上面求得和减去它。我的代码比较挫。#include#include#include#include#includeusing namespace std;int ans[200010],list[100010],low[100010], 阅读全文
posted @ 2013-07-23 22:14 fangguo 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 思路:利用一个估计函数g[i]=dis[i]+len。其中len为队列出来的点当前已经走了的距离。dis[i]为该点到终点的最短路径。这样我们只要将点按g[i]的升序在队列你排序,每次取出最小的g[i]值的点。其意义就是每次找最短的能到终点的点。第一次找到就是最短路径,第二次就是就是第二短,第三次就是...顺推#include#include#include#include#include#include#define Maxn 1010#define Maxm 200200#define inf 10000000using namespace std;int dis[Maxn],vi[Max 阅读全文
posted @ 2013-07-23 17:05 fangguo 阅读(268) 评论(0) 推荐(0) 编辑