鱼C论坛

 找回密码
 立即注册
查看: 808|回复: 11

求一个序列里连续子序列的最大长度

[复制链接]
发表于 2022-3-20 22:55:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 柿子饼同学 于 2022-3-21 11:04 编辑
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int max(int, int);
  4. int max(int a, int b){
  5.         return a > b ? a : b;
  6. }
  7. int main(){
  8.         int maxv = 0;
  9.         vector<int> dp;
  10.         vector<int> nums;
  11.         int n;
  12.         int k;
  13.         scanf("%d", &n);
  14.         for(int i = 0; i < n; i++){
  15.                 scanf("%d", &k);
  16.                 nums.push_back(k);
  17.         }
  18.         dp.push_back(nums[0]);
  19.         for(int i = 0; i < n; ++i){
  20.                 dp[i] = max(dp[i-1] + nums[i], nums[i]);
  21.                 if(dp[i] > maxv){
  22.                         maxv = dp[i];
  23.                 }
  24.         }
  25.         printf("%d", maxv);
  26.         return 0;
  27. }
复制代码

我的代码不知道为啥 , 不输出...
就是给一个整数的数组 , 要找其中一个有最大和的连续子数组 , 返回最大值
我看人动态规划视频写的 , 还是不太明白
求助 , 谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-20 23:53:28 | 显示全部楼层
输入没取地址,打个 & 试试

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
柿子饼同学 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-21 08:01:19 | 显示全部楼层
a327904410 发表于 2022-3-20 23:53
输入没取地址,打个 & 试试

谢谢提醒 , 但是还是没有输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-21 08:12:40 From FishC Mobile | 显示全部楼层
我不知道你的代码是否正确,但我觉得你的问题出现在:
scanf() 里面忘记 &
vector 向量没有定义长度情况下,不能直接下标赋值,可以试试用 vector 里的 push_back() 如同 Python 里的 list.append() 一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-21 09:18:37 | 显示全部楼层
傻眼貓咪 发表于 2022-3-21 08:12
我不知道你的代码是否正确,但我觉得你的问题出现在:
scanf() 里面忘记 &
vector 向量没有定义长度情况 ...

都改了 , 还是不行...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-21 10:54:41 From FishC Mobile | 显示全部楼层
柿子饼同学 发表于 2022-3-21 09:18
都改了 , 还是不行...


dp[0] = nums[0]; 也有改?
因为dp也是向量数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-21 11:05:07 | 显示全部楼层
本帖最后由 柿子饼同学 于 2022-3-21 11:11 编辑
傻眼貓咪 发表于 2022-3-21 10:54
dp[0] = nums[0]; 也有改?
因为dp也是向量数组


好了 , 现在打印的是一个奇怪的值
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int max(int, int);
  4. int max(int a, int b){
  5.         return a > b ? a : b;
  6. }
  7. int main(){
  8.         int maxv = 0;
  9.         vector<int> dp(100);
  10.         vector<int> nums(100);
  11.         int n;
  12.         int k;
  13.         scanf("%d", &n);
  14.         for(int i = 0; i < n; i++){
  15.                 scanf("%d", &k);
  16.                 nums.push_back(k);   //改过了
  17.         }
  18.         dp.push_back(nums[0]);   //改过了
  19.         for(int i = 0; i < n; ++i){
  20.                 dp.push_back(max(dp[i-1] + nums[i], nums[i])); //改过了
  21.                 if(dp[i] > maxv){
  22.                         maxv = dp[i];
  23.                 }
  24.         }
  25.         printf("%d", maxv);
  26.         return 0;
  27. }
复制代码

我设初始大小了结果打印一个 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-21 11:09:51 From FishC Mobile | 显示全部楼层
柿子饼同学 发表于 2022-3-21 11:05
好了 , 现在打印的是一个奇怪的值

哈哈,可以打印表示代码没有问题,只是代码不对而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-21 11:14:39 | 显示全部楼层
傻眼貓咪 发表于 2022-3-21 11:09
哈哈,可以打印表示代码没有问题,只是代码不对而已

话说您是怎么学动态规划的呀
我感觉好难懂
这是不是就是一种递归啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-21 11:28:02 From FishC Mobile | 显示全部楼层
我都是自学的,但只懂皮毛,称不上“会”
确实难懂
很多题目都是从递归演变而来的,比如:二叉树也可以用递归
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-21 15:20:35 From FishC Mobile | 显示全部楼层
柿子饼同学 发表于 2022-3-21 11:14
话说您是怎么学动态规划的呀
我感觉好难懂
这是不是就是一种递归啊

我是用 LCS 公式写的代码,公式如图: C7A0FA52-EF78-450A-955E-938066B9C0D8.jpeg
代码:
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>

  4. int C(size_t i, size_t j, std::vector<int> X, std::vector<int> Y){
  5.         if(!i || !j) return 0;
  6.         else if(X[i] == Y[j]) return C(i-1, j-1, X, Y) + 1;
  7.         return std::max(C(i, j-1, X, Y), C(i-1, j, X, Y));
  8. }

  9. int main() {
  10.         int A[] = {1, 3, 4, 5, 6, 7, 7, 8};
  11.         int B[] = {3, 5, 7, 4, 8, 6, 7, 8, 2};
  12.         size_t m = (sizeof(A)/sizeof(int)); // A 长度
  13.         size_t n = (sizeof(B)/sizeof(int)); // B 长度
  14.         std::vector<int> X(A, A+m); // vector 赋值
  15.         std::vector<int> Y(B, B+n); // vector 赋值
  16.         std::cout << C(m, n, X, Y); // 答案:5
  17.         return 0;
  18. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-21 15:24:14 From FishC Mobile | 显示全部楼层
柿子饼同学 发表于 2022-3-21 11:14
话说您是怎么学动态规划的呀
我感觉好难懂
这是不是就是一种递归啊

中文版本: 86B93D27-4932-4F2F-8C25-1015B0718387.jpeg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 09:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表