HDU 1160 FatMouse's Speed
2014-11-19 17:13
267 查看
水dp啊。
一维数组搞定。 先排序。 weigh 从小到大 如果相同 speed 从大到小
然后扫一遍就好了。 对于某一个位置 找出他之前的最大的位置就好。 d【】 要初始化为1
这个题要打印路径。 也简单。 对于任意一个位置。 只要找出 前面 数量最多的那个位置 用 fa【】 数组 记录一下就好。
以前最害怕打印路径的题了。 现在好多了。。
更新: 自己做完之后又去看了一下别人的做法。 简直弱爆了。 这个题还可以 按照 weigh 从小到大排序之后 求 speed 的最大下降子序列。。
一维数组搞定。 先排序。 weigh 从小到大 如果相同 speed 从大到小
然后扫一遍就好了。 对于某一个位置 找出他之前的最大的位置就好。 d【】 要初始化为1
这个题要打印路径。 也简单。 对于任意一个位置。 只要找出 前面 数量最多的那个位置 用 fa【】 数组 记录一下就好。
以前最害怕打印路径的题了。 现在好多了。。
更新: 自己做完之后又去看了一下别人的做法。 简直弱爆了。 这个题还可以 按照 weigh 从小到大排序之后 求 speed 的最大下降子序列。。
#include <cstdio> #include <iostream> #include <string> #include <algorithm> #include <cstring> using namespace std; #define MAXN 1000+10 struct Mice{ int we; int sp; int id; friend bool operator < (Mice a, Mice b){ if(a.we != b.we) return a.we < b.we; else return a.sp > b.sp; } }; int d[MAXN] = {0}; int f[MAXN] = {0}; Mice s[MAXN]; void dfs(int i){ if(!f[i]){ return ; } else{ dfs(f[i]); printf("%d\n",s[f[i]].id); } } int main (){ int x,y; int k = 1; memset(s,0,sizeof(s)); while(scanf("%d%d",&s[k].we,&s[k].sp) != EOF){ s[k].id = k,k++; } sort(s+1,s+k); int M = 0; for(int i = 0; i < k; i++) d[i] = 1; memset(f,0,sizeof(f)); for(int i = 1; i < k; i++){ for(int j = 1; j < i; j++){ if(s[j].we < s[i].we && s[j].sp > s[i].sp){ if(d[j]+1 > d[i]){ d[i] = d[j]+1; f[i] = j; } } } } int wh = 0; for(int i = 1; i < k; i++){ if(d[i] > M){ wh = i; M = d[i]; } } printf("%d\n",M); dfs(wh); printf("%d\n",s[wh].id); return 0; }
相关文章推荐
- HDU 1160 FatMouse's Speed(肥老…
- hdu 1160 排序 + 最长上升子序列
- hdu 1160 FatMouse's Speed(动态规划)
- [HDU1160]-FatMouse's Speed
- DP LIS 记录路径 hdu 1160
- HDU - 1160 —— FatMouse's Speed —— dp
- hdu 1160 (dp+路径记录)
- hdu 1160 FatMouse's Speed 解题报告
- HDU 1160 FatMouse's Speed(DP)
- HDU 1160 FatMouse's Speed(LIS)
- FatMouse's Speed HDU - 1160 --dp的路径记忆问题
- HDU1160 FatMouse's Speed 带路径的最长上升子序列问题
- HDU 1160 FatMouse's Speed (最长有序的上升子序列)
- hdu 1160 dp (二维最长上升子序列 记录路径
- HDU 1160 FatMouse's Speed (最长上升子序列+记录路径)
- hdu_1160 感觉就是模拟题
- hdu 1160 题意
- hdu1160 FatMouse'Speed
- HDU1160
- hdu 1160(最长递增子序列+输出)