#32285: 請問為什麼會一直跑出RE(記憶體區段錯誤)?


011081@stu.cchs.chc.edu.tw (19陳世杰)

學校 : 不指定學校
編號 : 174257
來源 : [61.223.73.133]
最後登入時間 :
2023-09-26 00:16:11
a587. 祖靈好孝順 ˋˇˊ -- 祖靈的的大背包 | From: [61.223.116.94] | 發表日期 : 2022-09-26 21:01

#include <iostream>
#include<algorithm>
using namespace std;

int dp(int amount,int oblist[100][2],int max_weight){
  int table[10000][10001];
  for (int i=0;i<amount;i++){
    for (int j=0;j<max_weight;j++){
      if (i==0){
        if (oblist[i][0]>j+1){
          table[i][j]=0;
        }
        else{
          table[i][j]=oblist[i][1];
        }
      }
      else{
        if (oblist[i][0]>j+1){
          table[i][j]=table[i-1][j];}
        else if(oblist[i][0]==j+1)
          if (oblist[i][1]>=table[i-1][j]){
            table[i][j]=oblist[i][1];
            }
          else{
            table[i][j]=oblist[i-1][j];
          }
        else if (oblist[i][0]<j+1){
          table[i][j]=max(table[i-1][j],oblist[i][1]+table[i-1][j-oblist[i][0]]);
}
      }
      }
    }
  return table[amount-1][max_weight-1];
  }
int main(){
  int n;
  int objlist[100][2];
  int w,v;
  int max_weight;
  while(cin>>n){
    for(int i=0;i<n;i++){
    cin>>w>>v;
    objlist[i][0]=w;
    objlist[i][1]=v;
  }
  cin>>max_weight;
  cout<<dp(n,objlist,max_weight)<<endl;
  }
  
  return 0;
}

 
#32409: Re: 請問為什麼會一直跑出RE(記憶體區段錯誤)?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
a587. 祖靈好孝順 ˋˇˊ -- 祖靈的的大背包 | From: [39.9.78.197] | 發表日期 : 2022-10-08 13:42

1.

  int table[10000][10001];
2.
            table[i][j]=oblist[i-1][j];


1. 陣列太大會stack overflow

2. oblist[i-1][j]會超出範圍

3. 這兩個地方改掉還是會TLE

 
ZeroJudge Forum