http://acm.hdu.edu.cn/showproblem.php?pid=1160
用sort函数对weight排序,然后用最长有序子序列的求法,求speed的递增序列。
一开始第提交出现WA是因为ONLINE写错了,万恶啊。。
#include <iostream>
#include <algorithm>
using namespace std;
#define N 1005
struct mouse_node{
int weight,speed,num;
};
mouse_node mouse[N];
int f[N],p[N];
bool cmp(mouse_node a,mouse_node b){
if (a.weight==b.weight)
return a.speed>b.speed;
else return a.weight<b.weight;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("1160in.txt","r",stdin);
#endif
int i=0,j,n,position=0,max_len=1;
while (scanf("%d%d",&mouse[i].weight,&mouse[i].speed)!=EOF){
mouse[i].num=i+1;
i++;
}
n=i;
sort(mouse,mouse+n,cmp);
for (i=0;i<n;i++){
f[i]=1;
p[i]=i;
}
for (i=1;i<n;i++)
for (j=0;j<i;j++)
if (mouse[j].speed>mouse[i].speed&&mouse[j].weight<mouse[i].weight)
if (f[i]<f[j]+1){
f[i]=f[j]+1;
p[i]=j;
if (f[i]>max_len){
max_len=f[i];
position=i;
}
}
printf("%d\n",max_len);
for (i=0;i<max_len;i++){
f[i]=position;
position=p[position];
}
for (i=max_len-1;i>=0;i--)
printf("%d\n",mouse[f[i]].num);
return 0;
}