我正在学习动态编程,并尝试使用动态编程解决Project Euler 的第 15 题。虽然我知道这个问题可以使用二项式系数来解决,但我想看看我学到了多少动态编程并因此尝试过。这是代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
using namespace std;
int main()
{
int gridsize;
cin>>gridsize;
int** grid = new int*[gridsize+1];
for ( int i = 0; i < gridsize+1; i++) {
grid[i] = new int[gridsize+1];
}
//Initialize the grid distances
for ( int i = 1; i <= gridsize ; i++) {
grid[i][0] = 1;
grid[0][i] = 1;
}
grid[0][0] = 0;
for ( int i = 1; i <= gridsize ; i++) {
for ( int j = 1; j <= gridsize ; j++) {
grid[i][j] = grid[i-1][j] + grid[i][j-1];
}
}
cout<<grid[gridsize][gridsize]<<endl;
delete(grid);
return 0;
}
预期的答案是 137846528820,而我得到的答案是 407575348。