今天重温了一下dp问题,发现自己两个礼拜不写题目就什么都不会了。。。心态爆炸,感觉去考试怕是要gg了。。。
不过今天总结一下写的题目,全部都是基础的dp问题
第一个是
求最长不下降子序列的长度
第一行为n,表示n个数 第二行n个数
最长不下降子序列的长度
N小于5000 for each num < =maxint
样例输入
3 1 2 3
样例输出
3
// // Created by 陈平 on 2018/7/8. // #include "iostream" using namespace std; int main(){ int num[6001]; int dp[6001]; int n; cin>>n; for (int i = 1; i <=n ; ++i) { cin>>num[i]; dp[i] = 1; } int maxx = 1; for (int j = 2; j <=n ; ++j) { maxx = 1; for (int i = 1; i <j ; ++i) { if(num[i]<num[j]) maxx = max(dp[i]+1,maxx); } dp[j] = maxx; } int flag = -999; for (int k = 1; k <=n ; ++k) { if(dp[k]>flag) { flag = dp[k]; } } cout<<flag; // for (int l = 1; l <=n ; ++l) { // cout<<dp[l]; // } }
难度不大,思想也比较简单。