暑期dp46道(13)——HDOJ 1160FatMouse's Speed 排序+最长严格下降子序列+回溯
来源:互联网 发布:大话西游手游抢星软件 编辑:程序博客网 时间:2024/05/22 09:02
题目链接:HDOJ 1160
题意:给定一组mice的体重w和速度s,输入以EOF结尾,求出任意一组w严格上升,s严格下降的mice序列的长度以及按顺序的下标
分析:这题如果先把所有mice的w按升序排列,就变成了求s严格下降的最长子序列,并回溯输出下标
这里用结构体记录数据并排序。
代码:
#include<cstdio>#include<cstring>#include<string>#include<algorithm>//sort(); using namespace std;#define debug 0#define M(a) memset(a,0,sizeof(a))#define Max(a,b) ((a>b)?a:b)const int maxn=1000+5;int dp[maxn],pre[maxn],t;struct R{int w;int s;int index;//记录输入的下标,用于输入 }r[maxn];bool cmp(const R a,const R b){//if(a.w==b.w)//return a.s>b.s;return a.w<b.w;//按w的升序排序}void print(int x){printf("%d\n",r[x].index);if(pre[x]){print(pre[x]);}}void Do(){int ans=0,cnt;sort(r+1,r+t,cmp);//cmp();函数是控制排序的 for(int i=t-1;i>=1;i--){dp[i]=1;for(int j=i+1;j<t;j++){if(r[i].w<r[j].w&&r[i].s>r[j].s&&dp[j]+1>dp[i]){dp[i]=dp[j]+1;pre[i]=j;//记录前一个排序后的下标 }}if(ans<dp[i]){ans=dp[i];//ans记录当前最长序列的lengthcnt=i;//当前所求最长序列的起始排序后下标,用于回溯 }}printf("%d\n",ans);print(cnt);//回溯输出} int main(){#if debugfreopen("in.txt","r",stdin);#endif//debugM(dp);M(pre);t=1;int a,b;while(~scanf("%d%d",&a,&b))//输入以EOF结尾{r[t].w=a;r[t].s=b;r[t].index=t;t++;}Do();return 0;}
1 0
- 暑期dp46道(13)——HDOJ 1160FatMouse's Speed 排序+最长严格下降子序列+回溯
- hdu 1160 FatMouse's Speed( 最长下降子序列 )
- hdu1160 FatMouse's Speed (求最长严格下降子序列路径)
- hdu 1160 排序+下降子序列变形 FatMouse's Speed
- hdoj1160 FatMouse's Speed ( STL + 最长下降子序列 /DP)
- HDU1160 FatMouse's Speed(DP,最长下降子序列)
- hdu1160 FatMouse's Speed 最长下降子序列 及其打印
- HDU1160 - FatMouse's Speed(最长下降子序列+打印路径)
- hdu1160 FatMouse's Speed 最长下降子序列 动态规划
- hdu1160 FatMouse's Speed 【最长下降子序列+输出】
- HDOJ 题目1160 FatMouse's Speed(最长上升子序列,输出路径)
- hdu-1160 FatMouse's Speed 【最长上升子序列】
- HDU 1160 FatMouse's Speed (dp, 最长子序列)
- HDU 1160 FatMouse's Speed 最长上升子序列
- HDOJ 1160 FatMouse's Speed (子序列 - 动态规划)
- 暑期dp46道(16)hdoj 1025 Constructing Roads In JGShining's Kingdom最长上升子序列(二分)
- HDU 1160 FatMouse's Speed(严格最长递减序列变形+输出)【输出路径模板】
- 暑期dp46道(29) HDOJ 1503 Advanced Fruits 最长公共子序列
- Android手机目前常见的分辨率
- 使用Volley框架发起网络访问的写法
- 数据结构上机测试1:顺序表的应用
- JS 判断鼠标长按 实例
- C# 获取计算机系统相关信息
- 暑期dp46道(13)——HDOJ 1160FatMouse's Speed 排序+最长严格下降子序列+回溯
- struts2自定义拦截器
- jQuery DataTables 使用方法整理(上)
- STL-->详解六大容器
- Linux用户态和内核态之间的交互
- B - Doubles
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- Android launcher启动器
- iOS开发——消息推送跳转