标签:
Description
Input
Output
Sample Input
Sample Output
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; const int maxn=1005; struct node{ int weight,speed,id; }que[maxn]; int dp[maxn],pre[maxn]; bool cmp(struct node t1,struct node t2){ if(t1.weight!=t2.weight) return t1.weight<t2.weight; return t1.speed>t2.speed; } int main(){ int x,y; int tot; tot=1; while(scanf("%d%d",&que[tot].weight,&que[tot].speed)!=EOF){ que[tot].id=tot; tot++; } sort(que+1,que+tot+1,cmp); memset(dp,0,sizeof(dp)); memset(pre,-1,sizeof(pre)); dp[1]=1; for(int i=2;i<tot;i++){ dp[i]=1; for(int j=i-1;j>=1;j--){ if((que[i].weight>que[j].weight)&&(que[i].speed<que[j].speed)&&dp[i]<dp[j]+1){ dp[i]=dp[j]+1; pre[i]=j; } } } int point,ans=-1; for(int i=1;i<tot;i++){ if(dp[i]>ans){ ans=dp[i]; point=i; } } printf("%d\n",ans); int tmp[maxn]; int cnt=0; for(int i=point;i!=-1;i=pre[i]){ // printf("%d\n",que[i].id); tmp[cnt++]=que[i].id; } for(int i=cnt-1;i>=0;i--) printf("%d\n",tmp[i]); return 0; }
标签:
原文地址:http://www.cnblogs.com/13224ACMer/p/5351463.html