航线
作者:互联网
一道放在区间DP题组中的线性DP
航线=友好城市+最长不下降子序列记录路径
错误
in
10
9
8
7
6
5
4
3
2
1
0
out 1
8
ans 1
9
分析 只有一条航线可以建立 但之前for i从2开始无法将第一条航线记录
所以for i应从1开始
//它难道不是线性DP吗
#include<bits/stdc++.h>
using namespace std;
int n,ans,ansend,output[10005],count1;
struct str1{
int n;
int s;
int dp;
int before;
}num[10005];
int main (){
cin>>n;
for(int i=1;i<=n;i++){
num[i].s=i;
num[i].dp=1;
cin>>num[i].n;
}
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
if(num[j].n<=num[i].n&&num[i].dp<num[j].dp+1){
num[i].dp=num[j].dp+1;
num[i].before=j;
}
}
if(num[i].dp>ans){
ans=num[i].dp;
ansend=i;
// cout<<"@@@"<<i<<endl;
}
}
cout<<ans<<endl;
for(;ansend>=1;ansend=num[ansend].before){
output[++count1]=ansend;
// cout<<"!!"<<ansend<<endl;
}
for(int i=count1;i>=1;i--){
cout<<num[output[i]].n<<" ";
}
return 0;
}
标签:航线,cout,int,ansend,num,ans,DP 来源: https://www.cnblogs.com/WANG-Yi-ding/p/15779515.html