[Project Euler] 来做欧拉项目练习题吧: 题目015
[Project Euler] 来做欧拉项目练习题吧: 题目015
周银辉
问题描述
Starting in the top left corner of a 22 grid, there are 6 routes (without backtracking) to the bottom right corner.

How many routes are there through a 2020 grid?
问题分析
这个题需要一点点观察能力:
观察2*2的方格,以左上角为起点,右下角为终点,形成的所有路径刚好可以构成一棵二叉树。
(不走回头路,并且以经过的方格上的节点为树节点,其中方格左上角为根节点,叶子节点始终是方格右下角)。
而路径条数也就是树的叶子节点个数。
用Count[A]表示树A的叶子节点个数,Left,Right表示左右子树.那么Count[A] = Count[Left] + Count[Right]
OK,问题就变得很简单了,一个递归算法就可以解决。
此后的问题,就是优化递归算法(创建一个缓冲区),减少重复运算,否则速度是不可接受的。
#include <stdio.h>
#define SZ 21 //20*20, index from 0 to 20, so size is 21
#define END (SZ-1)
long long grid[SZ][SZ];
long long test(int i, int j)
{
int record = grid[i][j];
if(record!=0)
{
return record;
}
if(i==END && j==END)
{
return 1;
}
long long left=0, right=0, total=0;
int ni=i+1, nj=j+1; //ni: next i
if(ni<SZ)
{
left = test(ni, j);
grid[ni][j] = left;
}
if(nj<SZ)
{
right = test(i, nj);
grid[i][nj] = right;
}
total = left+right;
grid[i][j] = total;
return total;
}
int main()
{
printf("path count: %lld\n", test(0,0));
return 0;
}
速度挺快的:
real 0m0.004s
user 0m0.001s
sys 0m0.003s
分类:
Algorithm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2010-02-24 SICP学习笔记(3.1)