首页 > 编程语言 >算法学习day48动态规划part09-377、213、198

算法学习day48动态规划part09-377、213、198

时间:2023-06-05 23:57:06浏览次数:53  
标签:part09 偷窃 213 nums int 房屋 day48 return dp

package LeetCode.DPpart09;
/**
 * 377. 组合总和 Ⅳ
 * 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。
 * 题目数据保证答案符合 32 位整数范围。
 * 示例:
 * 输入:nums = [1,2,3], target = 4
 * 输出:7
 * 解释:
 * 所有可能的组合为:
 * (1, 1, 1, 1)
 * (1, 1, 2)
 * (1, 2, 1)
 * (1, 3)
 * (2, 1, 1)
 * (2, 2)
 * (3, 1)
 * 请注意,顺序不同的序列被视作不同的组合。
 * */

public class CombinationSumIV_377 {
    public int combinationSum4(int[] nums, int target) {
        int[] dp = new int[target + 1];
        dp[0] = 1;
        for (int i = 0; i <= target; i++) {
            for (int j = 0; j < nums.length; j++) {
                if (i >= nums[j]) {
                    dp[i] += dp[i - nums[j]];
                }
            }
        }
        return dp[target];
    }

}
package LeetCode.DPpart09;
/**
 * 213. 打家劫舍 II
 * 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。
 * 同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。
 * 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。
 * 示例:
 * 输入:nums = [2,3,2]
 * 输出:3
 * 解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。
 * */

public class HouseRobbeII_213 {
    public int rob(int[] nums) {
        if (nums == null || nums.length == 0)
            return 0;
        int len = nums.length;
        if (len == 1)
            return nums[0];
        return Math.max(robAction(nums, 0, len - 1), robAction(nums, 1, len));
    }

    int robAction(int[] nums, int start, int end) {
        int x = 0, y = 0, z = 0;
        for (int i = start; i < end; i++) {
            y = z;
            z = Math.max(y, x + nums[i]);
            x = y;
        }
        return z;
    }
}
package LeetCode.DPpart09;
/**
 * 198. 打家劫舍
 * 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,
 * 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
 * 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
 * 示例:
 * 输入:[1,2,3,1]
 * 输出:4
 * 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
 * 偷窃到的最高金额 = 1 + 3 = 4 。
 * */

public class HouseRobber_198 {
    public int rob(int[] nums) {
        if (nums == null || nums.length == 0) return 0;
        if (nums.length == 1) return nums[0];

        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        dp[1] = Math.max(dp[0], nums[1]);
        for (int i = 2; i < nums.length; i++) {
            dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
        }

        return dp[nums.length - 1];
    }

}

 

标签:part09,偷窃,213,nums,int,房屋,day48,return,dp
From: https://www.cnblogs.com/lipinbigdata/p/17459334.html

相关文章

  • AtCoder Beginner Contest 213 H Stroll
    洛谷传送门AtCoder传送门考虑一个朴素dp,\(f_{t,u}\)表示\(t\)时刻走到\(u\)点的方案数。有转移:\[f_{t,u}=\sum\limits_{(u,v)=E_i}\sum\limits_{k=0}^{t-1}f_{k,v}\timesp_{i,t-k}\]直接做时间复杂度\(O(mT^2)\),无法接受。发现转移是加法卷积形式......
  • 213. 打家劫舍 II
    你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的......
  • C++黑马程序员——P213-214. queue容器
    P213.queue容器——基本概念P214.queue容器——常用接口P213.queue容器基本概念 P214.queue常用接口示例1classPerson2{3public:4Person(stringname,intage){5this->m_Name=name;6this->m_Age=age;7......
  • 1232131
    步骤1:安装必要的软件包首先,需要确保系统已安装dhcp、tftp-server和httpd等软件包。可以使用以下命令进行安装:yuminstall-ydhcptftp-serverhttpdsyslinux-tftpbootxinetd步骤2:配置DHCP服务器接下来,需要配置DHCP服务器以向客户端分配IP地址。在/etc/dhcp/d......
  • 22092133《Java程序设计》第一周学习总结
    1本周学习总结: 一个Java源文件可能编译出多个字节码文件。Scanner是Java的一个类,使用Scanner对象读取数据的时候,要注意next()方法只能读取到有效字符之前遇到的空白,并不能得到带有空格的字符串,nextLine()方法以Enter为结束符,返回输入回车之前的字符就可以获得空白2.书面作业......
  • 霍尔Foc算法解析,代码 中颖单片机,3213 提供代码、电路图和pcb
    霍尔Foc算法解析,代码中颖单片机,3213提供代码、电路图和pcb算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考……工程中坐标变换是库,算法是开源的,请知悉YID:38100634107899452......
  • [SWPUCTF 2022 新生赛]base64 已解决 题目分数:213
    查壳:64位,操作系统是ubantu的,可能会有所不同稍加留意一下,进IDA:依旧是比较题,我们先看看s2里的内容:‘TlNTQ1RGe2Jhc2VfNjRfTlRXUTRaR0ROQzdOfQ==’目标是v3,看看v3调用的函数sub_124C:base64?看看是不是标准码:巨标准,那么直接base64解码就好了:得到NSSCTF{base_64_NTWQ4ZGDNC7N}......
  • CF213C (棋盘dp的经典例题)
    RelayRace-洛谷|计算机科学教育新生态(luogu.com.cn)本题是棋盘dp的经典例题。可以先转化一下题意:从(1,1)走两条路径到(n,n),再确保两人是同步行走的。我们可以让一人的走路范围一直在左下方向,一人的走路范围一直在右上方向。(倘若两人的路径交叉,则都可以转化成这种情况)令......
  • github报错Failed to connect to github.com port 443 after 21313 ms: Couldn't conn
    github报错Failedtoconnecttogithub.comport443after21313ms:Couldn'tconnecttoserver网络连接问题,我开vpn了。github报错Recvfailure:Connectionwasreset该错误通常表示网络连接问题,可能是您的Internet连接出现问题或GitHub服务器上的连接问题。刷新重新登......
  • [ABC213D] Takahashi Tour 题解
    题目传送门一道dfs序题。题目中高桥每次只会去最小的那个点,所以要先对整张图进行排序。for(inti=1;i<=n;i++)sort(g[i].begin(),g[i].end());然后考虑dfs。高桥不会走重复的点,所以我们可以开一个vis数组进行标记。然后我们需要处理高桥君如果无路可走会返回上......