求助!!!!

P1001 A+B Problem

Xies_X @ 2024-11-06 10:12:53

采药.cpp

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int vo[110],va[200],dp[200][3000];
    int m,t;
    cin>>t>>m;
    memset(dp, 0, sizeof(dp));
    for(int i = 1;i<=m;i++)
        cin>>vo[i]>>va[i];
    for(int i = 1;i<=m;i++)
        for(int j = 0;j<=t;j++)
        {
            if(vo[i]>j)
                dp[i][j] = dp[i-1][j];
            else
                dp[i][j] = max(dp[i-1][j],dp[i-1][j-vo[i]]+va[i]);

        }
    cout<<dp[m][t];
    return 0; 
}

Process exited after 4.373 seconds with return value 3221225725 请按任意键继续. . .

内存一直是炸的,求助!!!!!


by Xies_X @ 2024-11-06 10:17:05

题到洛谷上提交都是AC的(哭)


by c22j33c43 @ 2024-11-06 10:31:25

你把int挪到全局变量那


by c22j33c43 @ 2024-11-06 10:34:40

@Xies_X 局部变量太大会栈溢出,但全局变量可容纳的内存很多


by Xies_X @ 2024-11-06 11:35:31

@c22j33c43 哦哦哦!!!


by Xies_X @ 2024-11-06 11:37:13

@c22j33c43 解决了呜呜呜太感谢了喵


by Xies_X @ 2024-11-06 11:52:20

@c22j33c43 佬

不过,溢出了编译器怎么没有警告喵?我用的编译器是98


by c22j33c43 @ 2024-11-06 15:18:48

@Xies_X

栈空间限制‌:局部变量存储在栈(Stack)中,而栈的空间是有限的。当局部变量过大时,会占用大量的栈空间,导致栈溢出。由于栈空间是由操作系统自动分配和释放的,因此当栈空间不足时,程序会直接崩溃,而不是给出警告‌12。

‌编译器优化‌:编译器在编译时通常不会对栈溢出的风险进行检测,因为它依赖于操作系统和硬件的限制。当局部变量过大时,操作系统会直接拒绝分配更多的栈空间,导致程序崩溃,而不是通过异常或警告来通知开发者‌2。

‌调试难度‌:由于栈溢出的错误通常不会通过异常或错误信息来提示,开发者在调试时很难定位问题。通常需要通过调试工具逐步跟踪函数的调用过程,观察栈的变化情况,才能找到导致栈溢出的具体位置‌12。

————————来自百度


by Xies_X @ 2024-11-06 16:32:57

@c22j33c43 ok喵


|