FatMouse's Speed---hdu1160(简单dp)
2015-11-01 11:33
295 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160
题意就是给你一些老鼠(编号1,2,3,4,5,6,7,8...)的体重和他们的速度然后求出最大的n满足
W[m[1]] < W[m[2]] < ... < W[m
]
and
S[m[1]] > S[m[2]] > ... > S[m
]
然后把原来的编号按照上面的序列输出来;
先把他们排序一下dp的时候记录一下路径;
View Code
题意就是给你一些老鼠(编号1,2,3,4,5,6,7,8...)的体重和他们的速度然后求出最大的n满足
W[m[1]] < W[m[2]] < ... < W[m
]
and
S[m[1]] > S[m[2]] > ... > S[m
]
然后把原来的编号按照上面的序列输出来;
先把他们排序一下dp的时候记录一下路径;
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; #define N 1550 #define INF 0xffffff struct node { int w, s, id; }a ; int cmp(node p, node q) { if(p.w!=q.w) return p.w<q.w; return p.s>q.s; } int main() { int n=0, dp , pre ; ///freopen("in.txt", "r", stdin); while(scanf("%d%d", &a .w, &a .s)!=EOF) { a .id=n+1; n++; } sort(a, a+n, cmp); memset(dp, 0, sizeof(dp)); memset(pre, -1, sizeof(pre)); int Max = 0; int Index = -1; for(int i=0; i<n; i++) { dp[i]=1; for(int j=0; j<i; j++) { if(a[j].w<a[i].w && a[j].s>a[i].s) { if(dp[j]+1>dp[i]) { dp[i]=dp[j]+1; pre[i]=j; } } } if(Max<dp[i]) { Max = dp[i]; Index = i; } } printf("%d\n", Max); int b ={0},k=0; for(int i=Index; i!=-1; i=pre[i]) { b[k++]=a[i].id; } for(int i=k-1; i>=0; i--) printf("%d\n", b[i]); return 0; }
View Code
相关文章推荐
- C#委托(一)
- SpringBeans【Spring】
- Java序列化和反序列化
- 一张图教你看懂BAT三大巨头移动互联网布局
- python中的reduce函数
- spring事务控制【Spring】
- 数据人员Sql必会列转行
- 数据人员Sql必会列转行
- 【HDOJ】1756 Cupid's Arrow
- C语言-文件操作的函数
- 安装varnish遇到的小问题
- Android绘图机制(二) ViewGroup类
- 树基础总结(算法导论)
- Des 加密处理 iOS 和 安卓 与服务器 处理时 遇到的 补位问题
- windows系统清理与维护
- linux笔记:压缩解压命令gzip,gunzip,tar,zip,unzip,bzip2,bunzip2
- ZUFE OJ 2301 GW I (3)
- App 引导界面
- Hibernate一级缓存【Hibernate】
- 十月,再见;你好,十一月