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喵