初学
含义:
BFS (广度优先搜索Breath First Search)常用于找单一的最短路线,它的特点是 "搜到就是最优解",而 DFS(深度优先搜索Depth First Search) 用于找所有解的问题,它的空间效率高,而且找到的不一定是最优解,必须记录并完成整个搜索,故一般情况下,深搜需要非常高效的剪枝。
eg:
有一个 N x N 的方格,每一个格子都有一些金币,只要站在格子里就能拿到里面的金币。你站在最左上角的格子里,每次可以从一个格子走到它右边或下边的格子里。请问如何走才能拿到最多的金币。
输入输出格式
输入格式 第一行有一个整数 N。 之后 N 行有 N 个整数,表示数组数组的所有元素,每个整数用一个空格隔开。
输出格式 一个整数。
输入输出样例1
输入 1 3
输出 3
输入输出样例2
输入
3
1 3 3
2 2 2
3 1 2
输出
11
说明提示
1≤n≤1000
分析:
通过题意(只能向右和向下走的特性)知道,依次比较,最终可得最优解
代码实现:(from头歌)
- #include <stdio.h>
- int a[1100][1100];///数组a的意义:从左边或从上边来能得到的最大金币数量(因为只有两条路可以选,从上来,或者从左来)
- int max(int a,int b)
- {
- if(a>b)
- return a;
- else
- return b;
- }
- int main()
- {
- int n;
- scanf("%d",&n);
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++)
- scanf("%d",&a[i][j]);
- for(int i=1;i<=n;i++)//只能从左来,或者从上来 ,取两者中最大的一个 加上当前位置的金币数量--->
- for(int j=1;j<=n;j++)//得到当前位置最大金币数量(即:无论怎么走,到达当前位置,最多能够得到的金币数量)
- a[i][j]=max(a[i-1][j],a[i][j-1])+a[i][j];
- printf("%d",a[n][n]);
- return 0;
- }