目录
055:小易的升级之路
056:礼物的最大价值
057:对称之美
055:小易的升级之路
小易的升级之路_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
根据题意简单模拟即可,可单独写gcd函数求最大公因数。
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
#include <iostream>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int n=0;
int a=0;
int b[N];int gcd(int a, int b) { if (b == 0) { return a; } return gcd(b, a % b);
}int main()
{int num=2;while(num--){cin>>n;cin>>a;int ret=a;for(int i=0;i<n;i++){cin>>b[i];if(b[i]<=ret){ret+=b[i];}else{ret+=gcd(ret,b[i]);}}cout<<ret<<endl;}return 0;
}
056:礼物的最大价值
礼物的最大价值_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
动态规划-简单路径类dp(线性dp)
1.状态表示:
dp[i][j]:走到位置 [i][j] 时,礼物的最大价值。
2.状态转移方程:
状态 dp[i][j] 可由状态 dp[i-1][j] 和 dp[i][j-1] 转化而来,取二者最大值再加上棋盘该位置的礼物值。
3.初始化-填表:
创建dp表时,多加一行多加一列初始化为0,dp表从下标为1开始填表(棋盘是从下标为0开始)以符合状态转移方程的推导。
4.返回值
dp表多加一行多加一列,因此到达棋盘右下角位置时,为dp表的dp[m][n]。要返回结果dp[m][n]。
class Solution {
public:int dp[210][210]={0};int maxValue(vector<vector<int> >& grid) {int m=grid.size(),n=grid[0].size();for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){dp[i][j]=max(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];}}return dp[m][n];}
};
057:对称之美
对称之美 (nowcoder.com)
题目:
题解:
双指针,left 和 right 分别从字符串数组s的两端开始向中间遍历,当字符串 s[left] 和 s[right] 存在相同字符时,符合回文串的规则,则 left++,right-- 再次判断。直到 left<right 。
#include<iostream>using namespace std;int t=0;
int n=0;
string s[100];bool func(string s1,string s2)
{for(auto ch1:s1){for(auto ch2:s2){if(ch1==ch2){return true;}}}return false;
}int main()
{cin>>t;while(t--){cin>>n;for(int i=0;i<n;i++){cin>>s[i];}int left=0,right=n-1;while(left<=right){if(func(s[left],s[right])){left++;right--;}else{cout<<"No"<<endl;break;}}if(left>right) {cout<<"Yes"<<endl;}}return 0;
}