迭代式
数学角度
迭代公式代码解决问题
常用模板
for(int len=1;len<=n;len++)
for(int L=1;L+len-1<=n;L++)
R=l+Len-1;
对于一个迭代问题,首先可以考虑的是是不是可以打表。打表的实质就是针对输入数据的组合数很小的情况(或者是中间某个数值)下,解决多个询问的方法。主要是空间换时间的思想。
一般这个问题一个是可以在常数项内解决问题,然后询问远远大于(不太可能,但是也是有概率的) 。
但是常常的是一个迭代式,同时也可以暴力求解,这样的话,暴力中的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) ; 这个一定要注意。
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 ;
}
}
迭代式开发
学习一个简单的例子,考虑一个阶乘的计算。阶乘的因子是从1到该数的整数。迭代定义为:如果算法的定义没有包含算法本身,则叫做迭代法。
迭代式开发也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
教学中,对迭代和版本的区别,可理解如下: 迭代一般指某版本的生产过程,包括从需求分析到测试完成; 版本一般指某阶段软件开发的结果,一个可交付使用的产品。