迭代公式代码解决的常见问题

对于一个迭代问题,首先可以考虑的是是不是可以打表。打表的实质就是针对输入数据的组合数很小的情况(或者是中间某个数值)下,解决多个询问的方法。主要是空间换时间的思想。

一般这个问题一个是可以在常数项内解决问题,然后询问远远大于(不太可能,但是也是有概率的) 。

但是常常的是一个迭代式,同时也可以暴力求解,这样的话,暴力中的n*T肯定超时,但是迭代的话可以在0(N)中求出所有的可能输入的结果,这样的话就是在0(n)预处理然后再很短的复杂度完成输入数据的查询。。。

但是一定要防止忘了等值迭代,其实只要在迭代的时候把各种情况考虑到,对于没有更新的值,问问自己是不是等于自己的初始值还是等于上一个的不变的值。

比如

f(x) = f(x-1) + x % 7 == 0 ? x * x : 0 

我就忘了,当x % 7 != 0 的时候,更新f(x) = f(x-1) ; 这个一定要注意。

51Nod1082

LL table[2000000] ;
int Judge(int i) {
    while(i){
        if(i % 10 == 7) return 0 ;
        i = i / 10 ;
    }
    return 1 ;
}
int main(){
    for(int i = 1 ; i <= 2000000 ; i ++){
        if(i % 7 != 0 && Judge(i)) {
            table[i] = table[i-1] + (LL)i*i ;
        }
        else {
            table[i] = table[i-1] ; ///别忘了。
        }
    }
    int T ; cin >> T ;
    while(T --) {
        int n  ; cin >> n ;
        cout << table[n] << endl ;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值