https://vjudge.net/problem/HDU-1257
最少拦截系统
//二分做法#include <cmath>#include <cstdio>#include <iostream>#include <algorithm>#include <queue>#include <map>#include <cstring>#include <vector>#include <stack>#include <string>using namespace std;#define ll long long#define ff first#define ss second#define mp make_pair#define ph push#define pb push_back#define all(x) (x).begin(), (x).end()typedef pair<int, int> pii;const int N = 3e4 + 5;const int INF = 1e9 + 5;priority_queue<int, vector<int>, greater<int> > pq;int dp[N], a[N];int main() {ios::sync_with_stdio(false);int n;while (cin >> n) {memset(a, 0, sizeof(a));for (int i = 0; i < N; i++) {dp[i] = INF;}for (int i = 1; i <= n; ++i) {cin >> a[i];}for (int i = 1; i <= n; i++) {*lower_bound(dp, dp + n, a[i]) = a[i];}cout << (lower_bound(dp, dp + n, INF) - dp) << endl;}return 0;}
//dp入门#include <cmath>#include <cstdio>#include <iostream>#include <algorithm>#include <queue>#include <map>#include <cstring>#include <vector>#include <stack>#include <string>using namespace std;#define ll long long#define ff first#define ss second#define mp make_pair#define ph push#define pb push_back#define all(x) (x).begin(), (x).end()typedef pair<int, int> pii;const int N = 3e4 + 5;const int INF = 1e9 + 5;priority_queue<int, vector<int>, greater<int> > pq;int dp[N], a[N];int main() {ios::sync_with_stdio(false);int n;while (cin >> n) {int sum=-1;memset(a, 0, sizeof(a));for (int i = 1; i <= n; ++i) {cin >> a[i];}for (int i = 1; i <= n; i++) {//记得初始化,如果有必要dp[i]=1;for(int j=1;j<i;j++){if(a[j]<a[i]){//dp[j] 是前面的状态dp[i]=max(dp[j]+1,dp[i]);}}sum=max(sum,dp[i]);}cout << sum << endl;}return 0;}
