hdu1160(最长上升子序列变形)
2016-12-08 20:58
295 查看
题目链接FatMouse's Speed
给出老鼠的体重和速度
求最长的序列,使得体重递增,速度递减
最长上升子序列变形
状态转移方程
代码
给出老鼠的体重和速度
求最长的序列,使得体重递增,速度递减
最长上升子序列变形
状态转移方程
if(mice[j].w>mice[i].w&&mice[j].s<mice[i].s){ if(dp[i]<dp[j]+1){ dp[i]=dp[j]+1; pre[i]=j; } }
代码
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <memory.h>
using namespace std;
const int maxn=1005;
struct node
{
int w,s,ind;
bool operator <(const node &n)const{
if(w>=n.w)return true;
else if (w==n.w) return s<n.s;
else return false;
}
}mice[maxn];
int dp[maxn];
int pre[maxn];
int main()
{
//freopen("in.txt","r",stdin);
int w,s;
int ind=0,pos=0;
while(scanf("%d%d",&w,&s)!=EOF){
mice[ind].w=w;
mice[ind].s=s;
mice[ind].ind=ind+1;
ind++;
}
sort(mice,mice+ind);
for(int i=0;i<ind;i++)dp[i]=1;
memset(pre,-1,sizeof(pre));
for(int i=0;i<ind;i++){
for(int j=0;j<i;j++){
if(mice[j].w>mice[i].w&&mice[j].s<mice[i].s){ if(dp[i]<dp[j]+1){ dp[i]=dp[j]+1; pre[i]=j; } }
}
}
int ans=-1;
for(int i=0;i<ind;i++){
if(ans<dp[i]){
ans=dp[i];
pos=i;
}
}
printf("%d\n",dp[pos]);
while(pos!=-1){
printf("%d\n",mice[pos].ind);
pos=pre[pos];
}
return 0;
}
相关文章推荐
- array array array (最长上升子序列变形)
- hdu4512(最长上升公共子序列变形)
- 最长上升子序列的变形
- hdu5489(最长上升子序列变形)
- 【HDU】5256 序列变换(最长上升子序列变形)
- array array array (最长上升子序列变形)
- ZOJ3519-Beautiful People:最长上升子序列的变形
- array array array (最长上升子序列变形)
- array array array (最长上升子序列变形)
- HDU - 2881 Jack's struggle (最长上升子序列变形)
- array array array (最长上升子序列变形)
- hdu 1087 Super Jumping! Jumping! Jumping!(最长上升子序列变形)
- 最长上升序列、最长下降序列及其变形模板
- array array array (最长上升子序列变形)
- NYOJ-矩形嵌套(最长上升子序列变形)
- array array array (最长上升子序列变形)
- nyist 16 矩形嵌套(最长上升子序列变形)
- hdu 1087 Super Jumping! Jumping! Jumping! 最长上升子序列的变形
- uva1471 - Defense Lines (最长上升子序列变形)
- hdu5256 序列变换 百度之星初赛第二场 最长上升子序列变形