hdu 1160——FatMouse's Speed

来源:互联网 发布:网络水军合法吗 编辑:程序博客网 时间:2024/06/06 15:45

题意:找出一堆老鼠中,体重逐渐增加,但是速度逐渐下降的最长的数量。
思路:先将老鼠按照体重升序排序,体重一样的将速度降序排序。然后dp就可以了。
代码如下:

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;struct Mise{    int w;    int s;    int id;    bool operator < (const Mise &a) const {        if(w==a.w){            return s>a.s;        } else {            return w<a.w;        }    }};int dp[1005];int pre[1005];Mise mise[1005];int tot=0;vector<int> rec;bool judge(const Mise &a,const Mise &b){    return a.w<b.w&&a.s>b.s;}int main(){//    freopen("data.txt","r",stdin);    int a,b;    tot=0;    memset(pre,-1,sizeof(pre));    while(scanf("%d%d",&a,&b)!=EOF){        mise[tot].w=a;        mise[tot].s=b;        mise[tot].id=tot+1;        tot++;    }    for(int i=0;i<=tot;++i){        dp[i]=1;    }    sort(mise,mise+tot);    int ans=0;    int tail=0;    for(int i=0;i<tot;++i){        for(int j=0;j<i;++j){            if(judge(mise[j],mise[i])&&dp[j]+1>dp[i]){                dp[i]=dp[j]+1;                pre[i]=j;            }        }    }    for(int i=0;i<tot;++i){        if(dp[i]>ans){            ans=dp[i];            tail=i;        }    }    for(;tail!=-1;tail=pre[tail]){        rec.push_back(tail);    }    reverse(rec.begin(),rec.end());    printf("%d\n",ans);    for(vector<int>::iterator it=rec.begin();it!=rec.end();it++){        printf("%d\n",mise[*it].id);    }    return 0;}
0 0
原创粉丝点击