首页 > 其他分享 >动态规划习题

动态规划习题

时间:2023-10-12 12:33:05浏览次数:26  
标签:count arr int sum System 习题 动态 规划 dp

DP习题

Melon的难题【01背包问题中“装满背包的最少物品数问题】

注意初始化问题,第一行除了第一个都要赋值最大值!!!

import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
       Scanner in = new Scanner(System.in);
        int count = in.nextInt();
        int[] arr = new int[count];
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            arr[i] = in.nextInt();
            sum += arr[i];
        }
        if (sum % 2 != 0){
            System.out.println(-1);
            return;
        }
        int[][] dp = new int[count + 1][sum / 2 + 1];   //  装满背包所需最小物品数量
        Arrays.fill(dp[0], count);
        dp[0][0] = 0;
        for (int i = 1; i < dp.length; i++) {
            for (int j = 0; j <= sum / 2; j++) {
                if (j >= arr[i - 1]){
                    dp[i][j] = Math.min(dp[i - 1][j], dp[i -1][j - arr[i - 1]] + 1);
                }else {
                    dp[i][j] = dp[i - 1][j];
                }
            }
        }
        //// 如果装满背包的最少物品数为n, 则说明没有平分方案,因为n个雨花石的重量之和为sumV,而背包的承重是bag = sumV / 2
        if (dp[dp.length - 1][sum / 2] == count){
            System.out.println(-1);
            return;
        }
        System.out.println(dp[dp.length - 1][sum / 2]);
    }
}

打印 DP 数组如下:

标签:count,arr,int,sum,System,习题,动态,规划,dp
From: https://www.cnblogs.com/aclq/p/17759235.html

相关文章

  • c# 简单的动态执行字符串
    在C#中,可以使用`CSharpCodeProvider`类动态执行C#代码。以下是一个示例,演示了如何动态执行C#命令:```csharpusingSystem;usingMicrosoft.CSharp;usingSystem.CodeDom.Compiler;usingSystem.Reflection;classProgram{staticvoidMain(){//创建CSh......
  • Dash 2.14版本开始支持动态回调注册!
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master大家好我是费老师,就在昨晚,Dash框架发布了其2.14.0新版本,新增的功能中,有一项非常令人兴奋,那就是其针对回调函数这一Dash中的核心概念,新增了动态回调函数注册的支持......
  • vue动态引入组件
    vue动态引入组件,正常情况是页面渲染时动态加载该页面组件,还能进行细化动态加载情况,比如弹窗组件动态导入:除了路由懒加载,你还可以在其他地方使用动态导入来按需加载组件。例如,在某个按钮的点击事件中异步加载一个组件:import('./components/MyComponent.vue').then((module)=>{......
  • 网络规划设计师真题解析--SNMP管理(安全威胁)
    在网络管理中要防范各种安全威胁。在SNMP管理中,无法防范的安全威胁是(35)。A.篡改管理信息:通过改变传输中的SNMP报文实施未经授权的管理操作B.通信分析:第三者分析管理实体之间的通信规律,从而获取管理信息C.假冒合法用户:未经授权的用户冒充授权用户,企图实施管理操作D.截获:未经授权......
  • 简述MyBatis动态SQL
    简述MyBatis动态SQL前言 MyBatis是一个用于Java持久层的开源框架,它提供了一种简化数据库访问的方式。MyBatis的动态SQL功能允许我们根据不同的条件动态生成SQL语句,以实现更灵活的数据库操作。在MyBatis中,我们经常使用以下标签来编写动态SQL:<if/>作用:用于实现简单的条......
  • 笨办法学Python3 习题32 循环和列表
    知识点:for i in y: #for循环开始i变量就被创建,所以不用提前创建只有在for循环里有效range(,)函数会从第一个数到最后一个之前的数,不包含最后一个数Y.append(X)将X追加到列表Y的尾部1the_count=[1,2,3,4,5]#创建3个列表变量2fr......
  • Wpf DataGrid设置列标题动态绑定实例
    在WPF中,可以使用DataGrid控件来显示和编辑表格式的数据。要设置DataGrid列标题的动态绑定,可以使用DataGrid的列定义和绑定功能。以下是一个示例,展示如何使用动态绑定设置DataGrid的列标题:在XAML中定义DataGrid控件,并为其定义列:<DataGridAutoGenerateColumns=......
  • 动态sql
    if <selectid="getEmpById"parameterType="emp"resultType="emp">  select* fromemp   <where>   <iftest="ename!=nullandename!=''">   ename=#{ename}  </if>  <if......
  • nz-table数据动态横向合并
     原文链接:https://www.longkui.site/program/frontend/nz-table/4865/先上效果图:环境:angular+ng-zorro原理:遍历json数据,对相同的json数据进行计数,然后把相同的json数据统一加上rowspan的长度,然后这些相同的json数据从0开始编号。原始的json数据:letjsonData2=[{......
  • Java算法之动态规划详解
    ①动态规划动态规划(DynamicProgramming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事......