1312. 让字符串成为回文串的最少插入次数
题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dcd8e4e3b1d8eba1008ea1e49e735c40.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/05770d805b86f056dbc3eb08be0159b0.png)
class Solution {
#define INF 0x3f3f3f3f
public:
int dp[505][505];
int minInsertions(string s) {
memset(dp,INF,sizeof dp);
int n=s.size();
for(int i=0;i<n;++i) dp[i][i]=0;
for(int len=2;len<=n;++len){
for(int i=0,j;i+len-1<n;++i){
j=i+len-1;
if(s[i]==s[j]) dp[i][j]=((len==2)?0:dp[i+1][j-1]);
else dp[i][j]=min(dp[i+1][j],dp[i][j-1])+1;
}
}
return dp[0][n-1];
}
};
312. 戳气球(戳破气球i获得到价值是val[i-1]*val[i]*val[i+1] 求全部戳破获得最大价值)
题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d6db03bab1d1556e71bd502e4f9c06fd.png)
class Solution {
public:
int maxCoins(vector<int>& nums) {
int n=nums.size();
int *a=new int[n+5],**dp=new int*[n+5];
for(int i=0;i<=n+4;++i) dp[i]=new int[n+5];
for(int i=0;i<=n+4;++i) for(int j=0;j<=n+4;++j) dp[i][j]=0;
a[1]=1,a[n+2]=1;
for(int i=0;i<n;++i) a[i+2]=nums[i];
n+=2;
for(int len=3;len<=n;++len){
for(int l=1,r;l+len-1<=n;++l){
r=l+len-1;
for(int k=l+1;k<=r-1;++k) dp[l][r]=max(dp[l][r],dp[l][k]+dp[k][r]+a[k]*a[l]*a[r]);
}
}
return dp[1][n];
}
};