已知一组老鼠的质量和速度,找出一个最大的子集满足越肥的老鼠跑的越慢。先对老鼠的质量进行从小到大排序,质量相同的情况下对速度进行从大到小排序。然后对速度运行最长单调递增子序列算法。递归输出结果。
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
struct node{
int m;
int s;
int num;
}mouse[1010];
int x,y,n,pos;
int path[1010],sum[1010];
bool cmp(node a,node b)
{
if(a.m==b.m)
return a.s>b.s;
return a.m<b.m;
}
void output(int path[],int pos)
{
if(pos==0) return;
else output(path,path[pos]);
printf("%d\n",mouse[pos].num);
}
int main()
{
n=0;
memset(path,0,sizeof(path));
memset(sum,0,sizeof(sum));
while(scanf("%d%d",&x,&y)!=EOF)
{
mouse[++n].m=x;
mouse[n].s=y;
mouse[n].num=n;
}
sort(mouse+1,mouse+n+1,cmp);
sum[1]=1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<i;j++)
if(mouse[i].s<mouse[j].s&&mouse[i].m>mouse[j].m)
{
if(sum[i]<sum[j])
{
sum[i]=sum[j];
path[i]=j;
}
}
sum[i]++;
}
int max=0;
for(int i=1;i<=n;i++)
{
if(sum[i]>max)
{
max=sum[i];
pos=i;
}
}
printf("%d\n",max);
output(path,pos);
return 0;
}
hdu 1160 FatMouse's Speed

最新推荐文章于 2021-06-01 18:00:21 发布
