8 389 207 155 300 299 170 158 65
2
#include <cstdio> #include <iostream> using namespace std; typedef long long ll; ll number,arr[10005],dp[10005]; int main(void) { ll i,j,ans; while(cin>>number) { if(!number) return 0; memset(arr,0,sizeof arr); memset(dp,0,sizeof dp); for(ll i=1;i<=number;i++) scanf("%lld",&arr[i]); ans=0; for(i=1;i<=number;i++) { ll x=arr[i]; for(j=1;j<=ans;j++) { //找能射穿它的火箭 if(x<=dp[j]) { dp[j]=x; break; } } //如果在已存在的序列中不存在比‘x’大的值,则需要新的火箭。 if(j>ans) { dp[++ans]=x; } } cout<<ans<<endl; } } //状态转移方程[function]描述了:1.序列的最小值 2.ans的个数 code: #include <cstdio> #include <iostream> using namespace std; typedef long long ll; ll number,arr[10005],dp[10005]; int main(void) { ll i,j,ans; while(cin>>number) { if(!number) return 0; memset(arr,0,sizeof arr); memset(dp,0,sizeof dp); for(ll i=1;i<=number;i++) scanf("%lld",&arr[i]); ans=0; for(i=1;i<=number;i++) { ll x=arr[i]; for(j=1;j<=ans;j++) { //找能射穿它的火箭 if(x<=dp[j]) { dp[j]=x; break; } } //如果在已存在的序列中不存在比‘x’大的值,则需要新的火箭。 if(j>ans) { dp[++ans]=x; } } cout<<ans<<endl; } } //状态转移方程[function]描述了:1.序列的最小值 2.ans的个数