// 53 最大子数组和
func maxSubArray(nums []int) int {
n := len(nums)
dp := make([]int,n)
dp[0]=nums[0]
ans := nums[0]
for i:=1;i<n;i++{
dp[i] = max(dp[i-1]+nums[i], nums[i])
if dp[i] > ans {
ans = dp[i]
}
}
return ans
}
func max(a, b int) int {if a > b {return a}
return b
}
剑指 Offer 47. 礼物的最大价值
// 未优化
func maxValue(grid [][]int) int {
//dp[i][j]定义为到达右下角所能获取的最大值
dp := make([][]int, len(grid))
for i:=0;i<len(grid);i++{
dp[i] = make([]int, len(grid[0]))
}
// 初始化第一行第一列
dp[0][0] = grid[0][0]
// 初始化每一行的第一个值
for i:=1;i<len(grid);i++{
dp[i][0] = dp[i-1][0] + grid[i][0]
}
// 初始化每一列的第一个值
for i:=1;i<len(grid[0]);i++{
dp[0][i] = dp[0][i-1] + grid[0][i]
}
//dp[i][j]的值只能从左方或者上方得到
for i:=1;i<len(grid);i++{
for j:=1;j<len(grid[0]);j++{
dp[i][j] = max(dp[i][j-1], dp[i-1][j]) + grid[i][j]
}
}
return dp[len(grid)-1][len(grid[0])-1]
}
func max(a,b int) int {
if a > b {
return a
}
return b
}