dp【i】表示为了拦截第i枚导弹最少需要多少个系统
状态转移方程
#include <iostream> #include <cmath> #include <cstdio> #include <cstring> #include <string> #include <map> #include <iomanip> #include <algorithm> #include <queue> #include <stack> #include <set> #include <vector> //const int maxn = 1e5+5; #define ll long long ll gcd(ll a,ll b){return b?gcd(b,a%b):a;} ll lcm(ll a,ll b){return a/gcd(a,b)*b;} #define MAX INT_MAX #define FOR(i,a,b) for( int i = a;i <= b;++i) #define bug cout<<"--------------"<<endl using namespace std; int dp[31000],a[31000]; int main() { int n; while(cin>>n) { FOR(i,1,n) cin>>a[i]; int maxx = 0; for(int i=1;i<=n;++i) { dp[i] = 1; for(int j=1;j<i;++j) { if(a[i] > a[j]) dp[i] = max(dp[j]+1,dp[i]); } maxx = max(maxx,dp[i]); } cout<<maxx<<endl; } }