题意:给你n个数,p个查询,每次查询下标为a,a+b,a+2b……的和。
思路:对n分块,b>时,可以直接暴力求和,最大扫描次数为O(
);b<=
时,用一个dp[j]存放从第j个数出发求得的和,容易得出dp[j]=dp[j+b]+a[j](这里设a为数据数组,下面的a和题意相同),为了更优化,更新dp之前先判断这一次询问的b是不是和上一次相同,如果相同,那么可以直接使用上一次得出的dp,还要判断dp[a]是不是为0,不是0说明已经记忆过,直接输出即可。整体的复杂度就是O(n*
)。
因为我的疏忽把小于号重载写错了,一直runtime error on test 9!!
#include<bits/stdc+