做过的dp题汇总
作者:
orange0912
,
2020-07-10 22:34:12
,
所有人可见
,
阅读 729
力扣 70. 爬楼梯 记忆化搜索+DP
class Solution {
public:
vector<int> memo;
int climbStairs(int n) {
memo=vector<int> (n+1,-1);//对于记忆化数组的初始化大小及初始化值
int ans=0;
memo[0]=memo[1]=1;
for(int i=2;i<=n;i++)
memo[i]=memo[i-1]+memo[i-2];
return memo[n];
}
};
力扣 343. 整数拆分 记忆化搜索+DP
class Solution {
public:
vector <int> memo;//记忆递归执行的结果
int process(int n)//处理方法:将n拆分为至少2部分,结果最大
{
if(n==1) return 1;//递归结束条件
if(memo[n]!=-1) return memo[n];
int ans=-1;
for(int i=1;i<=n-1;i++)//对于每个正整数,逐个尝试
{
ans=max(ans,i*(n-i));//选了i这个数,也选了n-i这个数的乘
ans=max(ans,i*process(n-i));//选了i这个数,也选了n-i 这个数
}
memo[n]=ans;
return ans;
}
int integerBreak(int n) {
memo=vector<int> (n+1,-1);//初始化记忆化数组,n+1个大小
return process(n);
}
};
力扣 198. 打家劫舍 记忆化搜索+DP
AcWing 2 01背包
AcWing 3 完全背包