练习4.1-2 暴力求解最大子数组

问题描述:
股票低价买进,高价卖出。我们不从每日价格的角度来看待输入数据,而是考察每日价格变化。
如数组A[13 -3 -25 20 -3 -16 -23 18 20 -7 12 -5 -22 15 -4 7],问题转换为寻找数组A的和最大非空连续子数组。用暴力求解的方法该子数组。
解题思路:
暴力求解没什么好说的,寻找数组A每一种的连续子数组,并计算其和,寻找和的最大值。
具体代码:
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int dp[100][100] = { 0 };
 4 int stock[100] = { 0 };
 5 int from, to;
 6 int max = -1000;
 7 
 8 int findMax(int start, int end){
 9      if (dp[start][end] != 0){
10            if (dp[start][end] > max){
11                 max = dp[start][end];
12                 from = start - 1;
13                 to = end;
14            }
15            return dp[start][end];
16      }
17      for (int i = start; i < end; i++){
18            dp[i][end] = findMax(i, end - 1) + findMax(end,end);
19            if (max<dp[i][end]){
20                 max = dp[i][end];
21                 from = i-1;
22                 to = end;
23            }
24      }
25      return dp[start][end];
26 }
27 
28 int main(){
29      int days;
30      scanf("%d", &days);
31      for (int i = 1; i <= days; i++){
32            scanf("%d", &stock[i]);
33            dp[i][i] = stock[i];
34      }
35      int x=findMax(1, days);
36      printf("%d %d %d %d", max, from, to,x);
37      return 0;
38 }

做题感悟:从今天开始做算法导论的笔记和博客,贵在坚持吧。

转载于:https://www.cnblogs.com/langzi1996/p/6703811.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值