DAY 23|动态规划1
3h
时隔一周终于重新拾起算法。。。目标赶开学前学完动态规划,一天完成两天的任务
以及,第一次接触背包问题,大败而归
509. 斐波那契数 - 力扣(LeetCode)
class Solution {
public:int fib(int n) {if(n<=1)return n;vector<int> dp(n+1);dp[0]=0;dp[1]=1;for(int i=2;i<=n;i++){dp[i]=dp[i-1]+dp[i-2];}return dp[n];}
};
70. 爬楼梯 - 力扣(LeetCode)
class Solution {
public:int climbStairs(int n) {if(n<=1)return n;vector<int>dp(n+1);dp[1]=1;dp[2]=2;for(int i=3;i<=n;i++){dp[i]=dp[i-1]+dp[i-2];}return dp[n];}
};
746. 使用最小花费爬楼梯 - 力扣(LeetCode)
class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {vector<int>dp(cost.size()+1);dp[0]=0;dp[1]=0;for(int i=2;i<=cost.size();i++){dp[i]=min(cost[i-1]+dp[i-1],cost[i-2]+dp[i-2]);}return dp[cost.size()];}
};
62. 不同路径 - 力扣(LeetCode)
class Solution {
public:int uniquePaths(int m, int n) {vector<vector<int>>dp(m,vector(n,0));for(int i=0;i<m;i++){dp[i][0]=1;}for(int j=0;j<n;j++){dp[0][j]=1;}for(int i=1;i<m;i++){for(int j=1;j<n;j++){dp[i][j]=dp[i-1][j]+dp[i][j-1];}}return dp[m-1][n-1];}
};
63. 不同路径 II - 力扣(LeetCode)
class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m=obstacleGrid.size();int n=obstacleGrid[0].size();if(obstacleGrid[0][0]==1||obstacleGrid[m-1][n-1]==1) return 0;vector<vector<int>> dp(m,vector<int>(n,0));for(int i=0;i<m&&obstacleGrid[i][0]==0;i++){dp[i][0]=1;}for(int j=0;j<n&&obstacleGrid[0][j]==0;j++){dp[0][j]=1;}for(int i=1;i<m;i++){for(int j=1;j<n;j++){if(obstacleGrid[i][j]==1)continue;dp[i][j]=dp[i-1][j]+dp[i][j-1];}}return dp[m-1][n-1];}
};
343. 整数拆分 - 力扣(LeetCode)
class Solution {
public:int integerBreak(int n) {vector<int> dp(n+1);dp[2]=1;for(int i=3;i<=n;i++){for(int j=1;j<=i/2;j++){dp[i]=max(dp[i],max(j*(i-j),j*dp[i-j]));}}return dp[n];}
};
46. 携带研究材料(第六期模拟笔试)
#include<iostream>
#include<vector>
using namespace std;
int main(){int n,bagweight;cin>>n>>bagweight;vector<int>weight(n,0);vector<int>value(n,0);for(int i=0;i<n;i++){cin>>weight[i];}for(int j=0;j<n;j++){cin>>value[j];}vector<vector<int>> dp(weight.size(),vector<int>(bagweight+1,0));for(int j=weight[0];j<=bagweight;j++){dp[0][j]=value[0];}for(int i=1;i<weight.size();i++){for(int j=0;j<=bagweight;j++){if(j<weight[i]){dp[i][j]=dp[i-1][j];}else{dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]);}}}cout<<dp[n-1][bagweight]<<endl;return 0;
}