一、小易的升级之路题目解析小易现在要打游戏现在游戏角色的初始能力值为a我们会遇到n个怪这些怪物的防御值为b1、b2、b3...如果我们的能力值要高于或者等于怪物的防御值那我们的能力值就会加bi如果不大于怪物的防御值我们的能力值就加当前能力值和bi的最大公约数。我们要求出来小易的最终能力值。算法思路这道题也是一道很简单的模拟题目了直接模拟整个过程即可。当前能力值为c如果cbi那能力值就加上bi如果cbi那能力值就加上c和bi的最大公约数。代码实现这里要注意的是题目是多组输入我们这里要用while(cinnc)来进行多组输入#includeiostreamusingnamespacestd;intmin_y(intx,inty){inttmpx%y;while(tmp){xy;ytmp;tmpx%y;}returny;}intmain(){intc,n;while(cinnc){for(inti0;in;i){intx;cinx;if(cx)cx;elsecmin_y(x,c);}coutcendl;}return0;}二、礼物的最大价值题目解析题目给了一个m*n的棋盘每一个格子里面都放着一个礼物每一个礼物都有一定价值现在我们从左上角开始拿礼物我们只能向右或者向下移动一格直到棋盘的右下角我们要计算最多可以拿到多少价值的礼物。给定一个二维数组每一个位置的值就表示该位置礼物的价值我们从(1,1)位置开始向右或者向下走直到(m,n)位置求最多可以拿到多少价值的礼物。算法思路这道题呢算是一道路径问题解法呢就是动态规划题目中说我们可以向右和向下走也就是从[i,j]位置移动到[i][j1]位置和[i1][j]位置我们反过来理解就是要走到[i,j]位置只能从[i][j-1]和[i-1][j]两个位置走过去那走到[i,j]位置能拿到礼物的最大价值就等于走到[i,j-1]和[i-1][j]位置能拿到礼物的最大价值的最大值再加上[i,j]位置礼物的价值。动态规划思路状态表示dp[i][j]表示走到[i,j]位置能拿到礼物的最大价值。状态转移方程dp[i][j] max(dp[i][j-1] , dp[i-1][j]) arr[i][j]。代码实现这里要注意下标对应题目给的数组grid下标是从(0,0)开始的而我们的dp表为了方便初始化下标是从(1,1)开始的。所以对于(i,j)位置该位置礼物的价值是存在(i-1,j-1)中的。classSolution{public:intdp[201][201]{0};intmaxValue(vectorvectorintgrid){// write code hereintmgrid.size();intngrid[0].size();for(inti1;im;i){for(intj1;jn;j){dp[i][j]max(dp[i][j-1],dp[i-1][j])grid[i-1][j-1];}}returndp[m][n];}};三、对称之美题目解析这里题目给出n个字符串让第1个字符到第n个字符每一个字符取出一个字符这样组成一个新的字符串让我们判断这个新的字符串是否可能是一个回文字符串如果也可能输出Yes否则就输出No。题目有t组数据对于每一组数据我们都要进行判断并输出结果。算法思路这道题初看可能有一点思路但不多对于n个字符串每一个字符串取一个字符组成的新字符串能否构成回文字符串对于回文字符串我们知道第1哥和第n个、第2个和第n-1个…这些字符都是相同的我们就非常好判断了定义l和r分别从两边开始遍历字符数组我们只需要判断l位置字符串和r位置字符串是否存在相同的字符就OK了。思路双指针 判断两个字符串是否存在相同的字符。那么现在问题就变成了如何判断两个字符串存在相同的字符那判断两个字符串中是否存在相同的字符方法就很简单了使用hash表计数。首先遍历第一个字符串将所有出现的字符放到hash表中让遍历第二个字符串判断是否存在相同的字符即可。代码实现#includeiostream#includevector#includeunordered_setusingnamespacestd;boolfunc(stringstr1,stringstr2){unordered_setcharhash;for(inti0;istr1.size();i){hash.insert(str1[i]);}boolbfalse;for(inti0;istr2.size();i){if(hash.count(str2[i])){btrue;break;}}returnb;}intmain(){intn;cinn;while(n--){intk;cink;vectorstringarr(k);for(inti0;ik;i){cinarr[i];}intl0,rk-1;//判断两个字符串中是否存在相同的字符boolrettrue;while(lk){if(func(arr[l],arr[r])false){retfalse;break;}l;r--;}if(ret)coutYesendl;elsecoutNoendl;}return0;}