【发布时间】:2020-04-27 02:12:42
【问题描述】:
在绝地求生者中,盔甲和防弹衣分为三个等级,分别记录为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)
蟒蛇:
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(worng!但我不知道为什么?为什么 c++ 中的输出错误?)
【问题讨论】:
-
快速回答——C++ 和 Python 是两种不同的语言。这就像问为什么法语有 3 个重音符号,而西班牙语有一个。
-
您的 C++ 代码具有未定义的行为,因为
result应该返回一个 int 但它永远不会返回。很明显,两个程序中最里面的两个循环是不同的。