uva 10131 Is Bigger Smarter?(动态规划:LIS变形+路径打印)
来源:互联网 发布:网络机顶盒如何更新 编辑:程序博客网 时间:2024/05/22 11:33
如果按照w排序,则只需求s的最长下降子序列即可
这道题难点就在于路径打印,但是因为要求打印任意一条
这就好处理多了
注意下细节即可
代码如下:
#include <vector>#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 1010using namespace std;int dp[MAXN];vector<int> vec;struct Elepant { int w, s, id;}a[MAXN];bool cmp(Elepant c, Elepant d) { if(c.w < d.w) { return true; } if(c.w == d.w) return c.s > d.s; return false;}void dfs(int pos) { if(pos < 1) return ; for(int i=pos-1; i>=0; --i) { if(dp[pos] == dp[i]+1 && a[pos].w>a[i].w && a[pos].s<a[i].s) { vec.push_back(a[i].id); dfs(i); break; } } return ;}int main(void) { int cnt = 0; while(scanf("%d%d", &a[cnt].w, &a[cnt].s) != EOF) { a[cnt].id = cnt+1; ++cnt; } a[cnt].id = cnt+1; ++cnt; sort(a, a+cnt, cmp); for(int i=0; i<cnt; ++i) { dp[i] = 1; } for(int i=0; i<cnt; ++i) { for(int j=i+1; j<cnt; ++j) { if(a[j].w>a[i].w && a[j].s<a[i].s) dp[j] = max(dp[j], dp[i]+1); } }/* for(int i=0; i<cnt; ++i) printf("%d\t%d\t%d\n", a[i].w, a[i].s, dp[i]);*/ int ans = -1; int pos, res; for(int i=0; i<cnt; ++i) { if(ans <= dp[i]) { ans = dp[i]; pos = i; res = a[i].id; } } printf("%d\n", ans); vec.clear(); vec.push_back(res); dfs(pos); for(int i=vec.size()-1; i>=0; --i) printf("%d\n", vec[i]); return 0;}
0 0
- uva 10131 Is Bigger Smarter?(动态规划:LIS变形+路径打印)
- UVA - 10131 - Is Bigger Smarter? (动态规划,LIS)
- Uva 10131 Is Bigger Smarter? (LIS,打印路径)
- UVA 10131 - Is Bigger Smarter? (动态规划)
- UVa 10131 Is Bigger Smarter? (DP&LIS)
- 【DP】UVA 10131 Is Bigger Smarter? LIS
- 一中OJ #1457 越大越聪明[Uva 10131 -> Is Bigger Smarter?] | 动态规划 字典序LIS | 解题报告
- UVA 10131 Is Bigger Smarter? (DP)
- Uva 10131-Is Bigger Smarter?(DP)
- uva 10131 Is Bigger Smarter? (DAG)
- UVa 10131 Is Bigger Smarter?
- UVa 10131 Is Bigger Smarter?
- UVA 10131 - Is Bigger Smarter
- uva 10131 Is Bigger Smarter?
- uva:10131 - Is Bigger Smarter?
- uva 10131 Is Bigger Smarter?
- UVA 10131 Is Bigger Smarter?
- UVA 10131 Is Bigger Smarter?
- Windows时间函数
- VS使用Qt库
- 数组合并
- ios内存管理随笔
- 黑马程序员————银行业务调度2
- uva 10131 Is Bigger Smarter?(动态规划:LIS变形+路径打印)
- svn 的三个配置文件样例
- 极端的父爱 湖北校园杀人案嫌犯为女儿上学卖掉租屋
- Servlet/Jsp实现当参数确实或缺失重新显示输入表单
- android与NDK层互相调用类方法
- 如何使用diskpart命令工具来对硬盘或者U盘设定写保护
- 黑马程序员————银行业务调度3
- 狼图腾
- Kernel PCA