AcWing 278. 数字组合

news/2025/1/15 18:03:02/

AcWing 278. 数字组合

  • 一、问题
  • 二、思路
    • 1、状态表示
    • 2、状态转移
    • 3、循环设计
    • 4、初末状态
  • 三、代码

一、问题

在这里插入图片描述

二、思路

这道题其实看上去和我们的01背包问题是非常相似的。如果这道题我们转化为01背包问题的话,描述如下:
给很多个物品和体积,然后从中任取几个物品能够恰好填满背包的方案数。

1、状态表示

f[i][j]f[i][j]f[i][j]表示从iii个物品里面选,经过选择后,总体积恰好jjj方案数

2、状态转移

这道题既然能够转化为了背包问题,那么我们就可以尝试用背包问题中状态转移方程的书写思路解决这道题。
那么对于前i个物品而言,我们可以根据第i个物品是否选择来写转移方程,这样的话,我们就能够把问题规模从i减小为i-1。选或者选,总共两种情况,我们只需要把这两种情况加起来就可以算出总的方案数。

f(i,j)={f(i−1,j)j<v[i]f(i−1,j−v[i])+f(i−1,j)j≥v[i]f(i,j)= \begin{cases} f(i-1,j)&j< v[i]\\ f(i-1,j-v[i])+f(i-1,j)&j\geq v[i] \end{cases} f(i,j)={f(i1,j)f(i1,jv[i])+f(i1,j)j<v[i]jv[i]

3、循环设计

循环设计的话就很简单了,我们只需要将物品数量i作为外层循环即可,这样的话我们更加方便对其进行空间优化。

4、初末状态

初末状态对于这道题而言是非常关键的,因为对于之前的题目而言,我们求的是物品的价值,但是当背包容量是0的时候,我们没有选择任何物品,此时最大价值是0。也就是说,我们不需要初始化。

但是这道题不一样,这道题求的是方案数,如果我们的数字个数是0个,m又恰好等于0。此时我们从0个数中,选取几个数,使得这些数的总和恰好是0,这种方案数是1。

所以我们需要将f[0][0]初始化为1。

而题目中的恰好二字,就体现在f[0][0]=1f[0][0]=1f[0][0]=1这行代码。

三、代码

代码这里就写一个空间优化过后的代码吧。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=110000;
int a[N],f[N];
int n,m;
int main()
{cin>>n>>m;for(int i=1;i<=n;i++)scanf("%d",a+i);f[0]=1;for(int i=1;i<=n;i++)for(int j=m;j>=0;j--)if(j>=a[i])f[j]=f[j]+f[j-a[i]];cout<<f[m]<<endl;return 0;
}

http://www.ppmy.cn/news/18934.html

相关文章

【快速简单登录认证】SpringBoot使用Sa-Token-Quick-Login插件快速登录认证

一、解决的问题 Sa-Token-Quick-Login 可以为一个系统快速的、零代码 注入一个登录页面 试想一下&#xff0c;假如我们开发了一个非常简单的小系统&#xff0c;比如说&#xff1a;服务器性能监控页面&#xff0c; 我们将它部署在服务器上&#xff0c;通过访问这个页面&#xf…

JS手动触发PWA安装窗口

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的博客 &#x1f34a;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;…

【人工智能原理自学】卷积神经网络:图像识别实战

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文讲解卷积神经网络&#xff1a;图像识别实战&#xff0c;一起卷起来叭&#xff01; 目录一、“卷”二、LeNet-5网络一、“卷” 这节课我们来看如何把卷积运算融入到神经网络…

连续系统的数字PID控制仿真-1

被控对象为一电机模型传递函数&#xff1a;式中&#xff0c;J 0.0067;B0.10。采用M函数的形式&#xff0c;利用ODE45的方法求解连续对象方程&#xff0c;输入指令信号为yd(k)0.50sin(2*3.14*t)&#xff0c;采用PID控制方法设计控制器&#xff0c;其中kp20.0 ,kd0.50。PID正弦跟…

springCloud集成elk+filebeat+kafka+zipkin实现多个服务日志链路追踪聚合到es

一、目的 如今2023了&#xff0c;大多数javaweb架构都是springboot微服务&#xff0c;一个前端功能请求后台可能是多个不同的服务共同协做完成的。例如用户下单功能&#xff0c;js转发到后台网关gateway服务&#xff0c;然后到鉴权spring-sercurity服务&#xff0c;然后到业务…

C语言基础知识总结大全(四)

15.数组遍历 #include <stdio.h>int main() {int arr[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int i;for(i0;i<10;i){printf("%d\n",arr[i]);}return 0; } 数组的冒泡排序 冒泡排序的思想&#xff1a;相邻元素两两比较&#xff0c;将较大的数字放在后面&#…

基于高通平台的dToF Sensor开机点亮教程

作为一个优秀的驱动工程师,迅速点亮目前市面上的Soc平台是非常必须的。如果你花费了很多时间无法Set up起平台,那你这驱动开发可能还有待提升,特别如今这市场,想要更高更强,驱动开发变得吃香了。一般圈子里的朋友,驱动开发都是大杀四方,比如高通平台,全志平台,MTK平台…

使用账号激活MATLAB软件

前言 很多学校购买了MATLAB软件的使用权&#xff0c;在校师生只需要使用自己的学校域名的邮箱&#xff0c;注册一个MATLAB账号即可免费使用MATLAB产品&#xff0c;再也不用各种去网上找破解资源了。 账号注册 访问账户注册页面&#xff1a; 创建 MathWorks 帐户然后填写账户信…