質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2905閲覧

AtCoderのRE原因

auto-blue

総合スコア9

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/08/24 13:09

AtCorderで半分REになってしまう問題があります。
範囲外へのアクセスをしていないか確認してみたりしましたが、原因がわからず困っています。

問題

ABC 175 E - Picking Goods

該当のソースコード

cpp

1#include <bits/stdc++.h> 2using namespace std; 3#define rep(i, n) for (i = 0; i < n; i++) 4 5const long long INF = 1LL << 60; 6 7int main() 8{ 9 int i, j, k, R, C, K; 10 cin >> R >> C >> K; 11 int V[R][C]; 12 long long dp[R+1][C+1][5]; 13 memset(V, 0, sizeof(V)); 14 memset(dp, 0, sizeof(dp)); 15 int r, c, v; 16 rep(i, K){ 17 cin >> r >> c >> v; 18 V[r-1][c-1]=v; 19 } 20 21 dp[0][0][1] = V[0][0]; 22 23 rep(i, R){ rep(j, C) { rep(k, 4){ 24 // to right 25 dp[i][j+1][k+1]=max(dp[i][j+1][k+1],dp[i][j][k]+V[i][j+1]); 26 dp[i][j+1][k]=max(dp[i][j+1][k],dp[i][j][k]); 27 // to down 28 dp[i+1][j][1]=max(dp[i+1][j][1],dp[i][j][k]+V[i+1][j]); 29 dp[i+1][j][0]=max(dp[i+1][j][0],dp[i][j][k]); 30 }}} 31 32 long long ans=0; 33 rep(i,4) ans=max(ans,dp[R-1][C-1][i]); 34 35 cout << ans << endl; 36 return 0; 37}

補足情報

実行時間 : 157 ms
メモリ : 10136 KB
エラーメッセージ : なし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

C++

1 2 int V[R][C]; 3 //... 4 rep(i, R){ rep(j, C) { rep(k, 4){ 5 //... 6 dp[i][j+1][k+1]=max(dp[i][j+1][k+1],dp[i][j][k]+V[i][j+1]); 7 //... 8 dp[i+1][j][1]=max(dp[i+1][j][1],dp[i][j][k]+V[i+1][j]); 9 }}} 10

dpは一つ多めに確保してますが、Vはまだちょうどのサイズなので、まだ範囲外のアクセスがありますね。
あとはおそらく配列の確保がそもそもできてないケースがあるはずです。メモリの使用量(どの程度性格かはわかりませんが)が10MB程度ですが、dp配列だけでその10倍は軽く超えるはずです。

投稿2020/08/24 17:15

yudedako67

総合スコア2047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

auto-blue

2020/08/25 03:11

Vの範囲外へのアクセス気がつきませんでした。 ありがとうございます。 メモリの確保について、main内で行おうとするとうまく行かず、main外で確保しておくとACでした。 もしご存知でしたら、main内とmain外でメモリの確保できるかできないかが異なった理由を教えていただきたいです。
yudedako67

2020/08/25 05:18

頻出の話題なので、「スタック ヒープ 静的領域」というようなワードで調べると詳しい説明が出ると思います。
auto-blue

2020/08/25 06:29

スッキリしました、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問