动态规划----FatMouse’s Speed(HDU 1160)
来源:互联网 发布:泼墨软件下载 编辑:程序博客网 时间:2024/06/07 09:49
HDU 1160 —— FatMouse’s Speed
给定 n 只老鼠,每只老鼠有体重和速度,求老鼠的一个最长序列,使得体重严格递增,速度严格递减。给出这个序列的长度,并且输出这个序列中的每只老鼠在输入中的序号。
解题思路:先对所有老鼠排序,第一个关键字体重从小到大,第二关键字速度从大到小。然后求这个序列中的最长严格递增子序列。
dp[i] 记录以 i 只老鼠作为结尾的最长合法序列的长度,则有状态转移方程 dp[i]=max{dp[j]+1},0<=j<i, 只老鼠前面。
最后输出时,用栈的方式输出。
以下为代码:
#include<iostream>#include <algorithm>#include <vector>using namespace std;struct zc{ int w; int s; int n;}m[1005];int dp[1005];bool comp(const zc &a,const zc&b){ if(a.w!=b.w) return a.w<b.w; return a.s>b.s;}int max(int a,int b){if(a>b)return a;else return b;}int main(){ int i,j,k; for(i=0;i<1005;i++) dp[i]=1; for(i=1;cin>>m[i].w>>m[i].s;i++) m[i].n=i; sort(m+1,m+i,comp); int maxd=1; for(j=2;j<i;j++) for(k=1;k<j;k++) if(m[k].w < m[j].w && m[k].s > m[j].s) { dp[j] = max(dp[k]+1, dp[j]); if(dp[j] > dp[maxd]) maxd = j; } cout<<dp[maxd]<<endl; int temp=maxd; vector<int>mm; mm.push_back(maxd); for(j=maxd-1;j>=1;j--) if(dp[maxd]==dp[j]+1) { mm.push_back(j); maxd=j; } for(j=dp[temp]-1;j>=0;j--) cout<<m[mm[j]].n<<endl; }
- HDU 1160 FatMouse's Speed 动态规划
- 动态规划----FatMouse’s Speed(HDU 1160)
- hdu 1160 FatMouse's Speed(动态规划)
- HDU 1160 FatMouse's Speed(动态规划)
- FatMouse's Speed-HDU-动态规划
- HDU--1160 -- FatMouse's Speed [动态规划+排序]
- J - FatMouse's Speed HDU 1160 (动态规划,最长上升子序列+路径输出)
- hdu 1160 FatMouse's Speed (DP)
- hdu 1160 FatMouse's Speed (LIS)
- HDU 1160 FatMouse's Speed(LDS)
- 【HDU】 1160 FatMouse's Speed (DP)
- HDU---1160-FatMouse's Speed (DP)
- HDU-1160 FatMouse's Speed(LIS)
- HDU 1160 FatMouse's Speed(DP)
- HDU 1160 FatMouse's Speed(LIS)
- hdu 1160 FatMouse's Speed(DP)
- hdu 1160 FatMouse's Speed(LIS)
- hdu 1160 FatMouse's Speed ( LIS )
- TCP详解
- Linux命令行报bash:.....:command not found的解决办法
- 为firefox的搜索栏添加baidu搜索
- CLR概述
- python学习系列之OS模块介绍
- 动态规划----FatMouse’s Speed(HDU 1160)
- C++对象模型(二)
- jacva
- eclipse使用tips-Toggle Mark Occurrences 颜色更改
- android下repo的基本使用
- 深入理解oracle listener tnsname sqlnet
- Unity3D 加载fbx模型,实现简单的方向控制
- 内核移植相关
- SQL Server2005安装过程中可能出现的问题