T1:小凯的疑惑
考察知识:数学,数论
算法难度:XXX 实现难度:X
分析:这是一个推(cai)结(da)论(an)的题
一看数据范围,就知道应该用时间复杂度
或以下的算法,如果猜有些或许你会发现答案就是
,注意用long long
关于结论的证明就参考这里吧:P3951 小凯的疑惑 题解
代码:
#include
int main(){
long long a,b;
std::cin>>a>>b;
std::cout<
T2:时间复杂度
考察知识:模拟,栈
算法难度:XXX 实现难度:XXX+
分析:一个在NOIP中中等规模的模拟类题目
大致思路:我们采用栈结构动态储存每一层的时间复杂度,并在当前层更新时间复杂度。
这道题保证
,更加简化了这道题的难度
代码:
#include
T3:逛公园
考察知识:图论,记忆化搜索
算法难度:XXXX 实现难度:XXXX
分析:
遇到难题先看数据范围,有3个
的点,就是最短路径计数模板,所以我们至少可以得30分。
对于非搜索类难题,数据范围就算小也不一定想得出部分分算法,但是注意到这道题
,我们可以考虑用记忆化的方法储存每个点比最短路大k的路径数,然后采用记忆化搜索即可。
这种方法类似于动态规划,所以我们还是用动态规划一般套路来描述:
定义:
表示节点 i 到 n 所有路径中路径长度小于等于最短路径加 k 的路径数
状态转移:
设V是节点 i 可以直接到达的节点的集合,
表示 i 到 n 的最短路径长度,
表示节点 i,j 的距离
则有:
边界:
至少等于1
注意事项:
1.由于有多组数据,每次处理完后要初始化
2.由于部分数据含0边,所以我们设一个
数组,表示
正在被计算,如果继续搜索又达到 (i,k)说明有无穷多种情况
代码:
#include