HDU 1160 FatMouse's Speed (dp, 最长子序列)
2016-04-06 12:33
447 查看
HDU 1160
dp[i]表示以第i个结尾的最长序列的长度。
参考博客:/article/4679822.html
dp[i]表示以第i个结尾的最长序列的长度。
参考博客:/article/4679822.html
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; const int MAXN = 1010; int dp[MAXN], res[MAXN], pre[MAXN]; struct node { int w, s; int id; }; bool cmp(node a, node b) { if(a.w != b.w) return a.w < b.w; else return a.s > b.s; } node mouse[MAXN]; int main() { int i = 1, w, s; while(~scanf("%d %d", &w, &s)) { dp[i] = 1; pre[i] = 0; mouse[i].s = s, mouse[i].w = w, mouse[i].id = i; i++; } int num = i - 1; sort(mouse + 1, mouse + num + 1, cmp); int j; int maxlen = 0, maxleni = 1; for(i = 1; i <= num; i++) { for(j = 1; j < i; j++) { if(mouse[j].w < mouse[i].w && mouse[j].s > mouse[i].s && dp[j] + 1 > dp[i]) { dp[i] = dp[j] + 1; pre[i] = j; if(dp[i] > maxlen) { maxlen = dp[i]; maxleni = i; } } } } int t = maxleni; i = 0; while(t != 0) { res[i++] = t; t = pre[t]; } printf("%d\n", i); while(i > 0) { i--; printf("%d\n", mouse[res[i]].id); } return 0; }
相关文章推荐
- [Lintcode] 搜索旋转排序数组 II Search in Rotated Sorted Array II
- FreeMarker 生成Java、mybatis文件
- Android 中的长度单位详解
- Easyui-ComboTree数据填充,递归。树形节点
- Java Web开发——Struts2 中.action和.do的奥秘
- 返回一个整数数组中最大子数组的和
- django之创建第11个项目-页面整合
- 第五周项目2-游戏中的角色类(2)
- 观察比较法
- 背包问题——动态规划算法详解与实例
- ListView的动态刷新问题——用notifyDataSetChanged没作用
- uploadify没反应
- C#使用MySQL连接数据库
- Unknown table engine ‘InnoDB’
- java规避空指针异常
- AWS的十年创新之路
- 如何组织代码
- documentdb
- browserwindow.js
- JavaScript的隐式转换和toString valueof的调用情况