很多人刚学算法的时候一听到枚举两个字就觉得这不是暴力嘛太low了我要学那种高大上的动态规划、二分查找。别这样真的。对于GESP四级这个阶段来说枚举法才是你拿分的主力军。什么是枚举法说白了就是把所有可能的情况都试一遍看哪个符合条件。就像你找钥匙不知道放哪了那就一个抽屉一个抽屉地翻翻完拉倒。笨是笨了点但管用啊。为什么说枚举是新手拿分神器第一它简单。不需要你记什么复杂的算法模板会写for循环就行。第二它不容易错。很多人学了二分边界条件写错死循环了。学了递归栈溢出了。枚举呢老老实实一个一个试只要循环写对了基本不会出大错。第三四级的题数据量根本不大。GESP四级的题n一般也就100、1000这个量级。你就算三重循环跑一下也完全跑得过来。举个例子比如这道题找出所有三位数中个位加十位加百位等于10的数。怎么写很简单三重循环for (int i 1; i 9; i) {for (int j 0; j 9; j) {for (int k 0; k 9; k) {if (i j k 10) {cout i j k endl;}}}}就这么几行完事了。你说它优雅吗一点也不优雅。但它能跑能出正确结果考试的时候能拿分。怎么优化枚举枚举也不是瞎枚举还是有小技巧的。第一个技巧缩小范围。比如刚才那道题百位从1开始不是从0开始。你要是从0开始就多试了一堆没用的情况。虽然对于三位数来说这点差距无所谓但养成好习惯总没错。第二个技巧提前break。有些题找到一个符合条件的就可以停了不用全部枚举完。第三个技巧别重复枚举。比如找两个数的和等于100你别i从1到99j也从1到99。那样(1,99)和(99,1)你会算两遍。可以让j从i1开始这样就不会重复了。什么时候该用枚举记住一个原则数据范围小就用枚举。比如n20你就算2^20次也才一百万完全没问题。n100O(n^3)也就一百万次照样没问题。但如果n10000你还三重循环那就超时了。所以考试的时候先看数据范围。数据小别想复杂了直接枚举。别为了用高级算法而用高级算法能过就行。总结对于GESP四级的选手来说枚举法真的是你的好朋友。它简单、好写、不容易错而且四级的题数据量也撑得住。别瞧不起暴力能拿分的算法就是好算法。先把枚举练熟了考试的时候至少能保住一半的分。等你把枚举玩明白了再去学那些更高级的算法也不迟。