完全背包相关题

完全背包相关题_第1张图片

 

class Solution {
public:
    int dp[5005];
    int change(int amount, vector& coins) {
            //dp[j]表示金额为j时的组合数
            dp[0]=1;
            for(int i=0;i

完全背包相关题_第2张图片

 

题解:如果求排列数的话,首先遍历背包,然后再遍历物品

class Solution {
public:
    int dp[5005];
    int change(int amount, vector& coins) {
            //dp[j]表示金额为j时的组合数
            dp[0]=1;
            for(int i=0;i=coins[i])
                    dp[j]+=dp[j-coins[i]];
                }
            }
            return dp[amount];
            
    }
};

完全背包相关题_第3张图片

 

class Solution {
public:
    int dp[10005];
    int coinChange(vector& coins, int amount) {
        //dp[i]表示组成金额i需要的最小硬币数
        int max_val=0x3f3f3f3f;
        memset(dp,max_val,sizeof(dp));
        dp[0]=0;
        for(int i=0;i

完全背包相关题_第4张图片

 

class Solution {
public:
    int dp[10005];
    int numSquares(int n) {
           //dp[i]表示和为i的最小完全平方数
        int max_bal=0x3f3f3f3f;
        memset(dp,max_bal,sizeof(dp));
        dp[0]=0;
        int w=sqrt(n);
        if(w*w==n)
        {
            return 1;
        }
        else{
            for(int i=1;i<=w;i++)
            {
                for(int j=i*i;j<=n;j++)
                {
                    dp[j]=min(dp[j],dp[j-i*i]+1);
                }
            }
            return dp[n];
        }
    }
};

完全背包相关题_第5张图片

 

class Solution {
public:
    bool wordBreak(string s, vector& wordDict) {
        //dp[j]表示前j个字符是否出现
        int l=s.length();
        vectordp(l+1,false);
         setse;
         for(int i=0;i

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