动态规划之最长 公共子序列和上升子序列

 1 #include <iostream>//abcdab bcdb
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 int main(){
 5     char x[105],y[105];
 6     cin>>x>>y;
 7     int n,m;
 8     n=strlen(x);
 9     m=strlen(y);
10     int dp[106][106]={0};
11     for(int i=1;i<=n;i++){
12         for(int j=1;j<=m;j++){
13             if(x[i]==y[j])
14                 dp[i][j]=dp[i-1][j-1]+1;
15             else
16                 dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
17         }
18     }
19     cout<<dp[n][m]<<endl;
20 } 
View Code
 1 #include <iostream>
 2 using namespace std;
 3 int main(){
 4     int i,j,dp[1010],n,a[1010],ans=0;
 5     cin>>n;
 6     for(i=1;i<=n;i++){
 7         scanf("%d",&a[i]);
 8         dp[i]=1;
 9     }
10     for(i=1;i<=n;i++){
11         for(j=1;j<i;j++){
12             if(a[i]>a[j])
13                 dp[i]=max(dp[i],dp[j]+1);
14         }
15         ans=max(ans,dp[i]);
16     }
17     cout<<ans<<endl;//输出的不是dp[n],我草了  5    5 6 7 1 2
18 }
View Code
原文地址:https://www.cnblogs.com/hcl6/p/13919707.html