0002:动态规划

动态规划的数塔问题

 1  #include<cstdio>
 2  #include<algorithm>
 3  using namespace std;
 4  const int maxn = 1000;
 5  int f[maxn][maxn],dp[maxn][maxn];
 6  int main(){
 7      int n;
 8      scanf("%d",&n);
 9      for(int i=1;i<=n;i++){
10          for(int j=1;j<=i;j++){
11              scanf("%d",&f[i][j]);
12          }
13      }
14      for(int j=1;j<=n;j++){
15          dp[n][j]=f[n][j];
16      }
17      for(int i=n-1;i>=1;i--){
18          for(int j=1;j<=i;j++){
19              dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+f[i][j];
20          }
21      } 
22      printf("%d\n",dp[1][1]);
23      return 0;
24  }

最大连续子序列和

 1  #include<cstdio>
 2  #include<algorithm>
 3  using namespace std;
 4  const int maxn=10010;
 5  int A[maxn],dp[maxn];
 6  int main(){
 7      int n;
 8      scanf("%d",&n);
 9      for(int i=0;i<n;i++){
10          scanf("%d",&A[i]);
11      }
12      dp[0]=A[0];
13      for(int i=1;i<n;i++){
14          dp[i]=max(A[i],dp[i-1]+A[i]);
15      }
16      int k=0;
17      for(int i=1;i<n;i++){
18          if(dp[i]>dp[k]){
19              k=i;
20          }
21      }
22      printf("%d\n",dp[k]);
23      return 0;
24  }

猜你喜欢

转载自www.cnblogs.com/mist2019/p/10365508.html