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

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

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

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Q&A

1回答

1755閲覧

Cで配列を定義するとerror: ISO C90 forbids variable length arrayが出る

taichiendo

総合スコア46

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

0グッド

0クリップ

投稿2022/03/21 07:16

このコードではナップサック問題を解く際に、int dp[MAX_N+1],v[MAX_W+1]; と配列を作成していますが、error: ISO C90 forbids variable length array ‘ [-Werror=vla]このようなエラーが出ます。そのため動的に配列を作成しようとしたのですが、下記のようなコードでいいのでしょうか?なぜMAX_N+1をしているのかがわかりませんでした。

C

1 dp = malloc(sizeof(int *) * (MAX_N+1)); 2 for (i=0;i<MAX_N+1;i++) { 3 dp[i] = malloc(sizeof(int) * (MAX_W+1)); 4 } 5

C

1https://dai1741.github.io/maximum-algo-2012/docs/dynamic-programming/ 2から引用。 3 4const int MAX_N = 1000; // nの最大値 5const int MAX_W = 5000; // Wの最大値 6 7// 入力 8int n, W; 9int w[MAX_N], v[MAX_N]; 10 11// DPテーブル 12// dp[i][j]はi番目以降の品物から重さの和がj以下なるように選んだときの価値の和の最大値を表す。 13int dp[MAX_N + 1][MAX_W + 1]; 14 15void solve_dp2() { 16 for (int j = 0; j <= W; j++) { 17 dp[n][j] = 0; 18 } 19 for (int i = n - 1; i >= 0; i--) { 20 for (int j = 0; j <= W; j++) { 21 if (j < w[i]) 22 dp[i][j] = dp[i + 1][j]; 23 else 24 dp[i][j] = max(dp[i + 1][j], dp[i + 1][j - w[i]] + v[i]); 25 } 26 } 27 cout << dp[0][W] << endl; 28}

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

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

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

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

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

guest

回答1

0

int w[MAX_N], v[MAX_N];

配列の要素数は定数でなければいけません。
変数ではダメです


int dp[MAX_N+1],v[MAX_W+1];

2つの配列を定義したいなら、

C

1int *dp,*v; 2 3とポインタを2つ定義しといて、 4関数の中で 5 6dp=malloc(sizeof(int)*(MAX_N+1)); 7v=malloc(sizeof(int)*(MAX_H+1));

ですね

投稿2022/03/21 07:32

編集2022/03/21 12:11
y_waiwai

総合スコア87749

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

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

taichiendo

2022/03/21 07:35

回答ありがとうございます。 変数を使う必要があるのですが、動的に配列を作るときに、どのように書き換えれば良いのかアドバイスいただきたいです。
y_waiwai

2022/03/21 07:38

動的に作るなら、ポインタを定義して、配列の領域をmallocなどで確保します まあ、最近のCなら、ローカル変数の配列に限っては、要素数を変数で定義することはできます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問