算法刷题 DAY44

518.零钱兑换II

cpp 复制代码
int change(int amount, int* coins, int coinsSize) {

    int dp[2000000]={0};
    dp[0]=1;

    for(int i=0;i<coinsSize;i++){
        for(int j=coins[i];j<=amount;j++){//完全背包→正序
            dp[j]+=dp[j-coins[i]];
        }
    }
    
    return dp[amount];
}

377.组合总和IV

cpp 复制代码
int combinationSum4(int* nums, int numsSize, int target) {

    int dp[2000000] = {0};
    dp[0] = 1;

    for (int j = 1; j <= target; j++) {//j从1开始

        for (int i = 0; i < numsSize; i++) { //完全背包→正序

            if (nums[i] <= j&&(dp[j]<INT_MAX-dp[j-nums[i]])) {//不能写成dp[j]+dp[j-nums[i]]<INT_MAX:左侧相加直接溢出报错,故使得判断条件无意义
            //判断条件不能放在for那行会造成栈溢出,且会截断for循环
            //C++测试用例有两个数相加超过int的数据,所以需要在if里加上dp[j- nums[i]]+dp[j] < INT_MAX  
                dp[j] += dp[j - nums[i]];
            }
        }
    }

    return dp[target];
}
相关推荐
骑着蜗牛撵大象3276 小时前
从三次握手到 epoll:C++ 写出可落地的 TCP Socket 服务端
网络·c++·tcp/ip·高并发·tcp·epoll
卡卡~~6 小时前
C++学习
开发语言·c++
杜 硕7 小时前
从零开始的C++生活——第四讲
开发语言·c++·生活
文丑颜不良啊7 小时前
LeetCode576~600题目解析
java·leetcode
lisw057 小时前
分岔论揭示演化突变密码
开发语言·算法·数学建模
aqiu1111117 小时前
C++ TopK:使用 nth_element 快速求最小 K 个数(蓝桥杯 / LeetCode 可用)
算法
H.莓飛7 小时前
【数据结构】快速排序专题
linux·服务器·c语言·数据结构·visual studio
努力实干8 小时前
Qt/C++ 模块化设计与工程组织
开发语言·c++·qt
Suprman8 小时前
平面排版问题的数学建模与算法设计
算法·数学建模·排序算法·排版套料
FPGA信号处理8 小时前
【应用随机过程】:更新过程与马尔可夫链入门
算法·概率论