######C言語で以下の問題に取り組んでいたのですが、どうも帰ってくる値が間違っています。
###DPコンテストCの問題
引用テキスト明日から太郎君の夏休みが始まります。 太郎君は夏休みの計画を立てることにしました。
夏休みはN日からなります。各i(1≤i≤N) について、
i日目には太郎君は次の活動のうちひとつを選んで行います。
A: 海で泳ぐ。 幸福度a_iを得る。
B: 山で虫取りをする。 幸福度 b_iを得る。
C: 家で宿題をする。 幸福度 c_iを得る。
太郎君は飽き性なので、2日以上連続で同じ活動を行うことはできません。
太郎君が得る幸福度の総和の最大値を求めてください。
入力は以下の形式で標準入力から与えられる。
N
a_1 b_1 c_1
a_2 b_2 c_2
...
a_N b_N c_N
###自分の回答
C
1#include <stdio.h> 2#include <math.h> 3 4int n; 5 6int main() { 7 scanf("%d", &n); 8 double a[2][n];//入力される値 9 //n日目にA,B,C(0,1,2であらわす)を選択したときの幸福度の最大 10 double score[2][n]; 11 for (size_t i = 0; i < n; i++) { 12 scanf("%lf%lf%lf", &a[0][i], &a[1][i], &a[2][i]); 13 } 14 15 //scoreを0で埋める 16 for (size_t i = 0; i < n; i++) { 17 for (size_t j = 0; j < 3; j++) { 18 score[j][i] = 0; 19 } 20 } 21 //n日目からn+1日目を出す 22 for (size_t i = 0; i < n; i++) { 23 printf("1:%d / %d / %d // %d / %d / %d\n", (int)score[0][i + 1], (int)score[1][i + 1], (int)score[2][i + 1], (int)score[0][i], (int)score[1][i], (int)score[2][i]); 24 score[0][i + 1] = fmax(score[1][i],score[2][i]) + a[0][i]; 25 printf("2:%d / %d / %d // %d / %d / %d\n", (int)score[0][i + 1], (int)score[1][i + 1], (int)score[2][i + 1], (int)score[0][i], (int)score[1][i], (int)score[2][i]); 26 score[1][i + 1] = fmax(score[0][i],score[2][i]) + a[1][i]; 27 printf("3:%d / %d / %d // %d / %d / %d\n", (int)score[0][i + 1], (int)score[1][i + 1], (int)score[2][i + 1], (int)score[0][i], (int)score[1][i], (int)score[2][i]); 28 score[2][i + 1] = fmax(score[1][i],score[0][i]) + a[2][i]; 29 printf("4:%d / %d / %d // %d / %d / %d\n", (int)score[0][i + 1], (int)score[1][i + 1], (int)score[2][i + 1], (int)score[0][i], (int)score[1][i], (int)score[2][i]); 30 } 31 printf("%d\n", (int)fmax(score[0][n], fmax(score[1][n], score[2][n]))); 32 return 0; 33}
試したこと
ところどころに書いてあるprintfで、配列の値がどう変化しているのか見てみました。
すると本来書き換わってほしくないscore[1][0],score[2][0]などが書き換わっていてこれが原因であることは分かりましたが、なぜこれらの値が書き換わっているのかわかりません。ご教授お願い致します。
#####入力
1 100 10 1
出力
1:0 / 0 / 0 // 0 / 0 / 0 2:200 / 0 / 0 // 0 / 200 / 0 3:200 / 100 / 0 // 0 / 200 / 100 4:200 / 100 / 210 // 0 / 200 / 100 210
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/12 15:11