В игре «Выживший джедай» есть три уровня брони и бронежилета, каждый из которых обозначен как 1,2,3. Каждый раз, когда вы можете подобрать только то, чего у вас нет, или модернизировать оборудование низкого уровня до высокого уровня, спросите, сколько существует маршрутов улучшения от ничего до «Броня Броня 3 уровня Броня 3 уровня Броня»? Текущее состояние представлено упорядоченным количеством пар (бронежилет, броня), обе из которых имеют значения 0-3, например (0,0) -> (0,1) -> (0,3) -> ( 3,3) в качестве стратегии обновления.
Теория состоит в том, что это массив 4 * 4, мне интересно, почему массив python 4 * 4 может быть реализован, но c ++ должен быть записан как int [4] [4] то есть 5 * 5 массив результата, чтобы быть правильным, int [3] [3] вычислено неправильно? (Результатом является последний элемент, который равен 106)
python:
dp = [[1,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
for i in range(4):
for j in range(4):
for m in range(j):
dp[i][j] += dp[i][m]
for m in range(i):
dp[i][j] += dp[m][j]
dp
вывод: 106 (правильный ответ) c ++:
#include<iostream>
int dp[3][3];
int main (){
dp[0][0] = 1;
for (int i = 0; i <= 3; i++){
for (int j = 0; j <= 3; j++){
for (int m = 0; m < i; m++)
dp[i][j] += dp[m][j];
for (int m = 0; m < j; m++)
dp[i][j] += dp[i][m];
}
}
std::cout<<dp[3][3]<<std::endl;
}
вывод: 1495 (чёрт! Но я не знаю почему? Почему вывод в с ++ неправильный?)