请观察以下代码:
代码(RE)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int n,w;cin>>n>>w;
vector<int>value(n+5,0);
vector<int>height(n+5,0);
vector<int>nums(n+5,0);
for(int i=1;i<=n;i++){
cin>>value[i]>>height[i]>>nums[i];
}
vector<int>new_value(n+5,0);
vector<int>new_height(n+5,0);
int new_n=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=nums[i];j*=2){
new_n++;
new_value[new_n]=j*value[i];
new_height[new_n]=j*height[i];
nums[i]-=j;
}
if(nums[i]){
new_n++;
new_value[new_n]=nums[i]*value[i];
new_height[new_n]=nums[i]*height[i];
nums[i]=0;
}
}
vector<vector<int>>dp(n+5,vector<int>(w+5,0));
for(int i=1;i<=n;i++){
for(int j=0;j<=w;j++){
if(j>=new_height[i]){
dp[i][j]=max(dp[i-1][j],dp[i-1][j-new_height[i]]+new_value[i]);
}
}
}
cout<<dp[n][w]<<endl;
return 0;
}
本人在这一题卡了很久,因为代码过程没有任何的错误,但是却RE了。后面我尝试使用静态数组,结果AC了(没有修改任何的过程),有没有大佬知道这是怎么一回事