hdu 1160 FatMouse's Speed
来源:互联网 发布:淘宝平邮无需物流 编辑:程序博客网 时间:2024/05/18 01:16
题目:寻找最长上升自序列。
代码:
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;struct node{ int w,s; //重量,速度 int num; //编号 int t; //用来记录当前编号前面的最优解的编号}root[1010];bool cmp(node a,node b) //先按照重量最小排,然后按照速度最大排{ if(a.w!=b.w) return a.w<b.w; return a.s>b.s;}int main(){ int x,y,i=0,j; int dp[1010]; //dp数组用来记录当前编号对应的最优解 memset(root,0,sizeof(root)); while(cin>>x>>y) { dp[i]=1; root[i].num=i+1; root[i].w=x;root[i++].s=y; } int n=i,ans=0; sort(root,root+n,cmp); for(i=0;i<n;i++) cout<<root[i].num<<":"<<root[i].w<<" "<<root[i].s<<endl; for(i=0;i<n;i++) { int p=-1; //记录当前编号前面的最优解的编号 for(j=0;j<i;j++) if(root[i].w>root[j].w&&root[i].s<root[j].s) { if(dp[i]<dp[j]+1) dp[i]=dp[j]+1,p=j; } if(p>=0) root[i].t=p; if(dp[ans]<dp[i]) ans=i; } cout<<dp[ans]<<endl; int t=dp[ans],p=ans; n=dp[ans]; while(t) //类似递归来寻找对应的序列 { dp[t]=root[p].num; //节省空间,请原谅我的节俭^ ^ p=root[p].t; t--; } for(i=1;i<=n;i++) cout<<dp[i]<<endl; return 0;}
0 0
- HDU 1160 FatMouse's Speed
- HDU 1160 - FatMouse's Speed
- hdu FatMouse's Speed 1160
- HDU-1160-FatMouse's Speed
- hdu 1160 FatMouse's Speed
- hdu 1160 FatMouse's Speed
- Hdu 1160 FatMouse's Speed
- hdu 1160 FatMouse's Speed
- hdu 1160 FatMouse's Speed
- HDU 1160 FatMouse's Speed
- HDU 1160 FatMouse's Speed
- hdu 1160 FatMouse's Speed
- HDU-1160 FatMouse's Speed
- hdu 1160 FatMouse's Speed
- hdu 1160 FatMouse's Speed
- hdu 1160 FatMouse's Speed
- hdu 1160 - FatMouse's Speed
- hdu 1160 FatMouse's Speed
- 骰子(nyoj 654 && 632)
- 用rz、sz命令在Xshell传输文件
- Http请求头解读
- Android开发和测试实践 - 接入友盟统计
- Genymotion无法安装解决办法
- hdu 1160 FatMouse's Speed
- ASP.NET中的Request和Respone对象的使用
- How Many Points of Intersection? uva
- Hadoop HDFS中的数据块和Map任务的分片
- 前m大的数
- vm使用常见问题汇总
- MinGw与Cygwin的区别
- Using fork() in C/C++ to create a child process(用C创建子进程)
- java中的函数总结