hdu1160 FatMouse's Speed

来源:互联网 发布:香草天空知乎 编辑:程序博客网 时间:2024/05/17 22:29
#include<cstdio></span>
#include<algorithm>#include<cstring>#include<iostream>using namespace std;int dp[1005],path[1005];struct ss {    int w,s,cnt;} num[1005];bool tmp(ss x,ss y) {    if(x.w == y.w)        return x.s > y.s;    return x.w < y.w;}int maxx(int x,int y) {    if(x > y)        return x;    else        return y;}void output(int x) {    if(!path[x])        return;    output(path[x]);    printf("%d\n",num[path[x]].cnt);}int main() {    int count = 1;    while(~scanf("%d%d",&num[count].w,&num[count].s)) {        num[count].cnt = count;        count++;        //if(count == 10)            //break;    }    sort(num+1,num+count,tmp);    //for(int i = 1;i < count;i++)        //printf("%d-%d-%d\n",num[i].w,num[i].s,num[i].cnt);    memset(path,0,sizeof(path));    int ans = 0,k;    for(int i = 1;i < count;i++) {        dp[i] = 1;        for(int j = 1;j < i;j++)            if(num[j].w < num[i].w && num[j].s > num[i].s) {                if(dp[j]+1 > dp[i]) {//只有在dp[i]<dp[j]+1的时候才需要更新path,因此不能直接用max(dp[i],dp[j]+1)!!!!!!!
                    dp[i] = dp[j]+1;                    path[i] = j;                }            }        if(ans < dp[i]) {            ans = dp[i];            k = i;        }    }    printf("%d\n",ans);    output(k);    printf("%d\n",num[k].cnt);}
</pre><pre name="code" class="cpp">一个小细节浪费了将近俩小时~心累,还是要想清楚。


0 0
原创粉丝点击