首页 > 其他分享 >整数划分问题(完全背包)(总方案数和最小方案数)

整数划分问题(完全背包)(总方案数和最小方案数)

时间:2023-08-15 19:25:51浏览次数:39  
标签:方案 背包 初始化 int coins 个数 整数 0x3f

完全背包解决整数划分问题:

总方案数:

完全背包:在前i个数中选,且总和恰好等于j的方案数
f[i][j] = f[i - 1][j] + f[i - 1][j - v]

化成一维:

f[j] += f[j - v];

这种求总方案数的情况需要把f初始化为0,然后f[0]初始化为1,最后累加f[j]

900. 整数划分

这里从小到大枚举i,用到的v就是枚举的i

#include <bits/stdc++.h>

using namespace std;

const int N = 1010, mod = 1e9 + 7;

int n;
int f[N];

int main()
{
    cin >> n;
    f[0] = 1;
    for(int i = 1; i <= n; i ++ )
        for(int j = i; j <= n; j ++ )
            f[j] = (f[j] + f[j - i]) % mod;

    cout << f[n] << endl;

    return 0;
}

最小方案数:

在前i个数中选,最后总和为j需要最少多少个数

一维:f[j] = min(f[j], f[j - v] + 1)

解释:总和为j时不选第i个数,总和为j时选第i个数(选第i个数前是f[j - v],选完第i个数后答案需要 + 1,代表选了1个第i个数),两者取最小值。

最小方案这种情况需要把f初始化为0x3f,f[0]初始化为0

279. 完全平方数

class Solution {
int f[10010];
public:
    int numSquares(int n) {
        memset(f, 0x3f, sizeof f);
        f[0] = 0;
        for(int i = 1; i <= n / i; i ++ )
        {
            int v = i * i;
            for(int j = v; j <= n; j ++ )
                f[j] = min(f[j], f[j - v] + 1);
        }
        return f[n];
    }
};

322. 零钱兑换

class Solution {
int f[100010];
public:
    int coinChange(vector<int>& coins, int amount) {
        memset(f, 0x3f, sizeof f);
        f[0] = 0;
        int n = coins.size();
        for(int i = 0; i < n; i ++ )
        {
            int v = coins[i];
            for(int j = v; j <= amount; j ++ )
                f[j] = min(f[j], f[j - v] + 1);
        }
        if(f[amount] == 0x3f3f3f3f) return -1;
        return f[amount];
    }
};

 

 

 

 

   

标签:方案,背包,初始化,int,coins,个数,整数,0x3f
From: https://www.cnblogs.com/yctql/p/17632218.html

相关文章

  • Streamlit 讲解专栏(三):两种方案构建多页面
    文章目录1前言2第一种方案:使用SessionState实现多页面交互2.1SessionState简介2.2多页面应用的基本结构2.3实现多页面交互的代码示例2.4SessionState机制的优缺点3第二种方案:Streamlit内置多页面方案(更为推荐)3.1如何运行多页面应用程序3.2添加页面3.3页面在用户界面......
  • 部署工业物联网可以选择哪些通信方案?
    部署工业物联网有诸多意义,诸如提升生产效率,降低管理成本,保障生产品质稳定,应对长期从业劳动力变化趋势等。针对不同行业、场景,工业物联网需要选择不同的通信方案,以达到成本和效益的最佳平衡。本篇就简单介绍一些IIoT部署常用的通信解决方案: 1、Wi-Fi方案:此方案主要基于工业无......
  • ElasticSearch置顶方案
    最近系统有个需求,希望工作流的审批人被催办后就要置顶在最前面,工作流列表我是用es的,一开始想用pinned实现,但用pinned的话,每页都会置顶在前面,我的需求只是想让他优先排在前面,翻页后正常显示后面找到这个,通过把匹配到数据的分数提高,然后用sort进行排序,就能实现我的需求了GETwf......
  • 由mysql rewrite插件带来的8.0升级问题及解决方案
    一、问题发生在客户现场遇到一个语句,走mysql的执行计划,总是不能达到预期的join顺序,需手动执行straightjoin。为了让sql能够自动转换,想到了5.7开始支持的rewriterplugin,于是在测试环境测试了一把(结果发现只能做一些简单的查询重写,稍微复杂的多表关联,总是匹配不成功,这个按下不表,......
  • 国标GB28181视频平台EasyGBS国标平台设备播放断流现象的问题解决方案
    安防视频监控EasyGBS平台基于国标GB28181协议,支持多路设备接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流。平台可为大数据等综合性监管平台提供极强的视频能力,已经在大量的项目中落地应用,如明厨亮灶、平安乡村、雪亮工程等。有用户反馈,在安防视频监......
  • vue前端项目中遇到的问题以及解决方案-不定时更新
    vue-cli创建vue项目中全局使用mixin首先需要安装插件npminstallstyle-resources-loadervue-cli-plugin-style-resources-loader--save-dev修改vue.config.js文件pluginOptions:{'style-resources-loader':{preProcessor:'scss',patterns:[//......
  • 工业物联网解决方案:粮机设备远程运维管理平台
    随着数字化转型技术的发展与进步,远程运维管理已经成为各行各业不可或缺的一部分。特别是在粮食加工行业,粮机设备的运维管理对于企业的生产效率和成本控制具有至关重要的作用。为了更好地实现粮机设备的远程运维管理,数之能提供专业高效的工业物联网解决方案。 粮机设备远程运维管理......
  • 基于eBPF技术构建一种应用层网络管控解决方案
    引言随着网络应用的不断发展,在linux系统中对应用层网络管控的需求也日益增加,而传统的iptables、firewalld等工具难以针对应用层进行网络管控。因此需要一种创新的解决方案来提升网络应用的可管理性。本文将探讨如何使用eBPF技术构建一种应用层网络管控解决方案,为linux系统上的网络......
  • 医疗案例分享 | 数据安全流转解决方案
    十八大以来,中共中央和总书记对推动医疗体系数字化发展尤为重视,2016年《“健康中国2030”规划纲要》,明确了创新医疗卫生服务模式,并提出“聚焦教育、医疗、养老、抚幼等重点领域,推动数字化服务普惠应用”。近些年,国家出台一系列政策鼓励智慧医疗产业发展,如2023年2月发布的《关于组织......
  • 视频汇聚平台EasyCVR安防监控视频汇聚平台的FLV视频流在VLC中无法播放的问题解决方案
    众所周知,TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入,包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上,视频监控汇聚平台EasyCVR的性能也同样表现得很优秀,平台可对外分发多格式的视......