1) 给出一串数字,求递增的最长子序列长度。
时间复杂度为n^2
#include <stdio.h>
#define MAX 100000
#define max(a,b) a>b?a:b
int main() {
int n,ans=0,num[MAX],dp[MAX];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
dp[i]=1;
}
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(num[i]>num[j])
dp[i]=max(dp[i],dp[i]+1);
}
ans=max(dp[i],ans);
}
printf("%d\n",ans);
return 0;
}
2)给出一串数字,求递增的最大递增子序列的和
时间复杂度为n^2
#include <stdio.h>
#define ll long long
#define MAX 100000
#define max(a,b) a>b?a:b
int main() {
ll n,ans=0,num[MAX],dp[MAX],temp;
while(scanf("%lld",&n)){
if(n==0) break;
for(int i=1;i<=n;i++){
scanf("%lld",&num[i]);
dp[i]=1;
}
ans=num[1];
dp[1]=num[1];
for(int i=2;i<=n;i++){
for(int j=1;j<=i;j++){
if(num[i]>num[j])
dp[i]=max(dp[i],dp[j]+num[i]);
}
dp[i]=max(dp[i],num[i]);
if(dp[i]>ans) ans=dp[i];
}
printf("%lld\n",ans);
}
return 0;
}