【递推||回溯】NOIp2001普及组 数的计算
题目链接
第一次看竟然没有思路,看来还是我太菜了
??这题可以用递归(回溯)做,也可以用递推做。但是思路都是一样的。这里的重点是当你在左边填了一个数后,下一次填数是以你填的这个数为基础的,而不是之前的原数。
??现在,对于一个数n,我在他的左边可以填1…n/2(注意这里一半也能填),那么填完后就变成了求我填的这个数有几种拓展的方法数,因此就分解成了规模更小的几个子问题。
??光说可能不一定能理解,蒟蒻就拿给的样例来解释一下思路
??输入n = 6,那么6左边填完后可能是16,26,36吧,1,2,3就对应了1…n/2吧。所以n = 6就被转换成了n = 1,n = 2,n = 3这三种方法的情况之和。对于n = 1、2、3的情况,我们还以相同的方式去求,最后就能求出答案。
??说白了并不难(毕竟只是道橙题),下面给出DFS(回溯)的代码:
//DFS版:注意:会TLE
#include<iostream>
#include<cstdio>
int f(int);
using namespace std;
int n