LeetCode-312-戳气球

思路
使用动态规划解决这个问题
为了方便处理边界问题,在两边加上1,考虑最后只剩下一个气球,那么这个时候,得分为dp[i][k]+v[i]*v[k]*v[j]+dp[k][j],显然这就是一个动态规划问题,我们需要求出dp[i][k]和dp[k][j]区间的值

代码
class Solution {
public int maxCoins(int[] nums) {
int n=nums.length;
int [][]dp=new int[n+2][n+2];
int []v=new int[n+2];
v[0]=1;
v[n+1]=1;
for(int i=1;i<n+1;i++){
v[i]=nums[i-1];
}
for(int i=n-1;i>=0;i--){
for(int j=i+2;j<n+2;j++){
for(int k=i+1;k<j;k++){
int sum=v[i]*v[k]*v[j];
sum+=dp[i][k]+dp[k][j];
dp[i][j]=Math.max(dp[i][j],sum);
}
}
}
return dp[0][n+1];
}
}
这篇博客详细介绍了如何利用动态规划解决LeetCode第312题戳气球的问题。代码中展示了如何初始化状态并遍历气球,通过三重循环计算最大得分,最后返回dp数组的结果。动态规划在这里用于优化计算过程,避免重复计算,提高了效率。
433

被折叠的 条评论
为什么被折叠?



