首先,还是亮一下代码:
#include<iostream>
using namespace std;
int n,ll,sum,c[502],l[502],a[1000006];
int main(){
cin>>n>>ll;
for(int i=1;i<=n;i++){
cin>>l[i];
cin>>c[i];
sum+=c[i];
}
for(int i=1;i<=n;i++){
for(int j=sum;j>=l[i];j--){
if(j-l[i]>=0){
//cout<<"<"<<j-l[i]<<" "<<a[j-l[i]]<<" "<<c[i]<<">";
a[j]=max(a[j],a[j-l[i]]+c[i]);
}
//cout<<a[j]<<" ";
}
}
for(int i=0;i<=sum;i++){
int x=a[i];
//cout<<a[i];
//cout<<a[i]<<" ";
//cout<<"//"<<x<<"//";
if(x>=ll){
cout<<i;
return 0;
}
}
cout<<"no solution";
return 0;
}
我自己测了一个贴着数据范围的样例,但是 return 了一个“3221225477”
网上冲浪得知,有以下三种可能:
访问了局部变量地址——除了i和j,其余均为全局变量
空指针异常——无指针
如上,找不到错误,于是开了调试,结果:

执行到max函数时,它把 stl源码 给调了出来,还弹出一个 Error窗口 。
点了OK之后,把 CPU window 也给整出来了:

因为max函数前的输出(上面的代码里注释了)数据均为正常的,所以就排除了所有我能查到的错误的可能(比如数据溢出、访问错误等)
所以,
\Large \textrm \color{Red}{哪位大佬能帮帮我!}