剑指 Offer 42. 连续子数组的最大和
找到递推公式即可,判断当前值是否需要加上
f=max(f+nums[i],nums[i]);
AC代码
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int leng=nums.size();
int f=nums[0];
int mmax=f;
for(int i=1;i<leng;i++){
f=max(f+nums[i],nums[i]);
mmax=max(mmax,f);
}
return mmax;
}
};
剑指 Offer 47. 礼物的最大价值
这题是一个经典的递推模板题,定义一个dp二维数组,初始化第一行和第一列,然后遍历一遍数组即可
class Solution {
public:
int maxValue(vector<vector<int>>& grid) {
int r=grid.size();
int c=grid[0].size();
int dp[r+1][c+1];
dp[0][0]=grid[0][0];
for(int i=1;i<c;i++) dp[0][i]=dp[0][i-1]+grid[0][i];
for(int i=1;i<r;i++) dp[i][0]=dp[i-1][0]+grid[i][0];
for(int i=1;i<r;i++){
for(int j=1;j<c;j++){
dp[i][j]=max(dp[i-1][j]+grid[i][j],dp[i][j-1]+grid[i][j]);
}
}
return dp[r-1][c-1];
}
};