代码随想录60期day41

完全背包

#include
#include

int main()
{
	int n,bagWeight;
	int w,v;
	cin>>n>>bagWeight;
	vectorweight(n);
	vectorvalue(n);

	for(int i = 0;i >weight[i]>>value[i];
	}

	vector>dp(n,vector(bagWeight + 1,0));

	for(int j = weight[0] ; j

518

class Solution {
public:
    int change(int amount, vector& coins) {
        int bagSize = amount;

        vector> dp(coins.size(), vector(bagSize + 1, 0));

        // 初始化最上行
        for (int j = 0; j <= bagSize; j++) {
            if (j % coins[0] == 0) dp[0][j] = 1;
        }
        // 初始化最左列
        for (int i = 0; i < coins.size(); i++) {
            dp[i][0] = 1;
        }
        // 以下遍历顺序行列可以颠倒
        for (int i = 1; i < coins.size(); i++) { // 行,遍历物品
            for (int j = 0; j <= bagSize; j++) { // 列,遍历背包
                if (coins[i] > j) dp[i][j] = dp[i - 1][j]; 
                else dp[i][j] = dp[i - 1][j] +  dp[i][j - coins[i]];
            }
        }
        return dp[coins.size() - 1][bagSize];
    }
};

377

class Solution {
public:
    int combinationSum4(vector& nums, int target) {
        vector dp(target + 1, 0);
        dp[0] = 1;
        for (int i = 0; i <= target; i++) { // 遍历背包
            for (int j = 0; j < nums.size(); j++) { // 遍历物品
                if (i - nums[j] >= 0 && dp[i] < INT_MAX ) {
                    dp[i] += (long long int )dp[i - nums[j]];
                }
            }
        }
        return dp[target];
    }
};

爬楼梯

#include
#include
using namespace std;
int main(){

	int n,m;
	while(cin>>n>>m){
		vectordp(n + 1,0);
		dp[0] = 1;
		for(int i = 1;i<=n;i++){
			for(int j = 1;j<=m;j++){
				if(i -j >=0) dp[i]+=dp[i-j];
			}
		}

	}
	cout<

你可能感兴趣的:(算法,leetcode,职场和发展)