标签:acm
题目给出不确定数量的老鼠的体重和速度,求一个最长序列,其中的老鼠体重递增,速度递减。最后输出序列的长度和老鼠的序号。#include<cstdio>
#include<stack>
#include<algorithm>
#include<cstring>
using namespace std;
struct rat{
int wei,spe,id;
void init(int w,int s, int i){
wei=w,spe=s,id=i;
}
};
bool cmp(rat a, rat b){
return a.wei<b.wei;
}
const int maxn = 1005;
rat r[maxn];
int dp[maxn],pre[maxn];
int main(){
int len=1;
int w,s;
while(~scanf("%d %d",&w,&s)){
r[len].init(w,s,len);
len++;
}
len--;
sort(r+1,r+1+len,cmp);
memset(dp,0,sizeof(dp));
memset(pre,-1,sizeof(pre));
for(int i=1;i<=len;i++){
dp[i]=1;
for(int j=1;j<i;j++){
if(r[j].wei<r[i].wei&&r[j].spe>r[i].spe&&dp[j]+1>dp[i]){
pre[i]=j;
dp[i]=dp[j]+1;
}
}
}
int ans=max_element(dp+1,dp+1+len)-dp;
stack<int>out;
int lo=ans;
while(lo!=-1){
out.push(r[lo].id);
lo=pre[lo];
}
printf("%d\n",dp[ans]);
while(out.empty()==false){
printf("%d\n",out.top());
out.pop();
}
return 0;
}
标签:acm
原文地址:http://blog.51cto.com/13688928/2116165