2017.2.21考试总结

T1 简单的字符串处理,注意:
①字母转数字用一个常数数组即可,不需要N个for循环

char map[26] = {'2', '2', '2', '3', '3', '3', '4', '4', '4','5', '5', '5', '6', '6', '6', '7', 0, '7', '7', '8', '8', '8', '9', '9', '9', 0};  //字手机按键上的字母与数字的映射表 
 ②include<>一定要打完,要不然编译都错

T2 先预处理每个数,哈希,再枚举每个数,找B+C的结果是否再预处理出的hash数组里,O(N)的复杂度

int locate(int x)          //预处理           
{
    int i=x % mod;                       
    while((data[i]>0)&&(hash[i]!=x))++i; 
    return i;
}

for(i=1;i<=n;++i)    //枚举B+C的结果 
{
    j=locate(a[i]+c); 
    ans+=data[j];    
}

T3 DP,考试的时候以为后面的会改变前面的结果就满足无后效性,就没有去想DP的方法,结果可以由拆分区间来求解, 将[1,i]区间分成[1,j]区间与合法[j+1,i]集合组成,则要使[1,i]区间满足条件的集合数最小,显然[1,j]区间满足条件的集合数为最小,即每一段的最小值都可以从前面的某一段的最小值转移过来。

//转移方程
F[i]=MIN{F[j]}+1
{S1[j+1][i]=0 or S2[j+1][i]=0 or ABS(S1[j+1][i]-S2[j+1][i])<=M}

主要是对区间DP的思想不够熟悉,而且DP的思想理解也不够彻底。

你可能感兴趣的:(考试总结)