动态规划二维费用的背包问题系列一>盈利计划

题目解析: 链接: link状态表示:状态转移方程:初始化:填表顺序: 根据状态转移方程,i 从小到大即可返回值: 返回:dp[len][n][minProfit]代码呈现:代码语言:javascript代码运行次数:0运行复制class

动态规划二维费用的背包问题系列一>盈利计划

题目解析:

链接: link

状态表示:

状态转移方程:

初始化:

填表顺序:

根据状态转移方程,i 从小到大即可

返回值:

返回:dp[len][n][minProfit]

代码呈现:

代码语言:javascript代码运行次数:0运行复制
class Solution {
    public int profitableSchemes(int n, int minProfit, int[] group, int[] profit) {
        int len = group.length;
        int MOD = (int)1e9 + 7;
        int[][][] dp = new int[len+1][n+1][minProfit+1];

        for(int i = 0; i <= n; i++) dp[0][i][0] = 1;

        for(int i = 1; i <= len; i++)
            for(int j = 0; j <= n; j++)
                for(int k = 0; k <= minProfit; k++){
                    dp[i][j][k] = dp[i-1][j][k];
                    if(j >= group[i-1]){
                        dp[i][j][k] = dp[i-1][j][k] + dp[i-1][j-group[i-1]][Math.max(0,k-profit[i-1])];
                        dp[i][j][k] %= MOD;
                    }
                }

        return dp[len][n][minProfit];        
    }
}

空间优化版本:

代码语言:javascript代码运行次数:0运行复制
class Solution {
    public int profitableSchemes(int n, int minProfit, int[] group, int[] profit) {
        int len = group.length;
        int MOD = (int)1e9 + 7;
        int[][] dp = new int[n+1][minProfit+1];

        for(int i = 0; i <= n; i++) dp[i][0] = 1;

        for(int i = 1; i <= len; i++)
            for(int j = n; j >= group[i-1]; j--)
                for(int k = minProfit; k >= 0; k--){
                    dp[j][k] = dp[j][k] + dp[j-group[i-1]][Math.max(0,k-profit[i-1])];
                    dp[j][k] %= MOD;
                }

        return dp[n][minProfit];        
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-04-01,如有侵权请联系 cloudcommunity@tencent 删除dpintpublic动态规划优化

发布者:admin,转转请注明出处:http://www.yc00.com/web/1748031623a4721263.html

相关推荐

  • 动态规划二维费用的背包问题系列一>盈利计划

    题目解析: 链接: link状态表示:状态转移方程:初始化:填表顺序: 根据状态转移方程,i 从小到大即可返回值: 返回:dp[len][n][minProfit]代码呈现:代码语言:javascript代码运行次数:0运行复制class

    5小时前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信