拿到的时候各路大神就开始动态规划起来了,本人小白一个,动态规划只在python上做数学竞赛的时候用过,那么直接使用c(长+宽,长)
#include<iostream>
using namespace std;
long long func(int a) {
unsigned long long length1=1;
unsigned long long length2=1;
for(int i=0;i<20;i++){
length1*=(a*2-i);
length2*=(a-i);
}
return length1/length2;
}
int main() {
int ans = 20;
unsigned long long a=0;
a=func(ans);
cout << a << endl;
return 0;
}
那么你会得到返回值:6
因为这个阶乘太大了!
下面看一下大佬的动态规划:
#include<iostream>
using namespace std;
long long dp[25][25];
int main() {
for (int i = 1; i <= 21; i++) {
for (int j = 1; j <= 21; j++) {
if (i == 1 && j == 1) dp[i][j] = 1;
else dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
cout << dp[21][21] << endl;
return 0;
}
大佬这段代码直接给一个25*25的矩阵,取从1,1 开始的20*20个,其余位置是0,这样在计算20方阵的值时不会因为外围的位置而影响大小,其本质是从第一个位置开始向下推有几种走法,在各个节点的走法都计算出来后累加到最后一个点就得出走法总数