uva 10131

https://vjudge.net/problem/UVA-10131

   直接暴力N^2dp就好了,最后找一下路径输出,很经典的DAG题目。

  

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<vector>
 6 #include<stack>
 7 using namespace std;
 8 #define inf 0x3f3f3f3f
 9 struct node{int w,s,u;}P[1005];
10 bool cmp(node A,node B){return A.w<B.w;}
11 int f[1005];
12 int main()
13 {
14     int N=1,M,i,j,k;
15     while(cin>>P[N].w){cin>>P[N].s;P[N].u=N;N++;}N--;
16     sort(P+1,P+1+N,cmp);
17     memset(f,0,sizeof(f));
18     int ans=0;
19     for(i=1;i<=N;++i)
20     {
21         int maxn=0;
22         for(j=1;j<i;++j)
23         {
24             if(P[j].w<P[i].w&&P[j].s>P[i].s&&f[j]>maxn){
25                 maxn=f[j];
26             }
27         }
28         f[i]=maxn+1;
29         if(f[i]>ans) ans=f[i];
30     }
31     printf("%d\n",ans);
32     stack<int>s;
33     for(i=N;i&&ans;--i)
34     {
35         if(f[i]==ans){ans--;s.push(i);}
36     }
37     while(!s.empty()) {printf("%d\n",P[s.top()].u);s.pop();}
38     return 0;
39 }

 

转载于:https://www.cnblogs.com/zzqc/p/7488931.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值