2017.2.21考试总结

来源:互联网 发布:ubuntu 优麒麟 编辑:程序博客网 时间:2024/05/29 18:55

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的思想理解也不够彻底。

1 0
原创粉丝点击