当前位置: 首页 > news >正文

[dp+dfs]砝码称重

题目描述

现有 n n n 个砝码,重量分别为 a 1 , a 2 , … , a n a_1, a_2, \ldots,a_n a1,a2,,an ,在去掉 m m m 个砝码后,问最多能称量出多少不同的重量(不包括 0 0 0 )。

输入格式

第一行为有两个整数 n n n m m m ,用空格分隔。
第二行有 n n n 个正整数 a i a_i ai ,表示每个砝码的重量。

输出格式

输出一行一个整数,表示最多能称量出的重量的数量。

样例

样例输入1:

3 1
1 2 2

样例输出1:

3

样例解释1
在去掉一个重量为 2 2 2 的砝码后,能称量出 1 , 2 , 3 1, 2, 3 1,2,3 3 3 3 种重量。

数据范围

对于 20 % 20\% 20% 的数据, m = 0 m = 0 m=0
对于 50 % 50\% 50% 的数据, m ≤ 1 , n ≤ 10 m \le 1,n\le 10 m1,n10
对于 100 % 100\% 100% 的数据, n ≤ 20 , m ≤ 4 , m < n , a i ≤ 100 n \le 20, m \le 4,m < n,a_i \le 100 n20,m4,m<n,ai100

题解

对于 20 % 20\% 20% 的数据,去掉 0 0 0 个砝码,就是一个 01背包 问题。

对于 50 % 50\% 50% 的数据,枚举每个数是否选择,判断去掉个数后做 01背包

对于 100 % 100\% 100% 的数据,对上面的搜索进行剪枝,如果去掉个数大于 m m m,返回。也可以枚举去掉的砝码,会快一些。

#include<bits/stdc++.h>
using namespace std;
int n, m;
int a[23];
bool f[23];
int dp[2010];
int ans = 0;
void solve(){//01 背包memset(dp, 0, sizeof(dp));dp[0] = 1;int s = 0;//01 背包每次最多更新到多少for(int i = 1; i <= n; ++ i){if(f[i]){continue;}s += a[i];for(int j = s; j >= a[i]; -- j){if(dp[j - a[i]]){dp[j] = 1;}}}//统计个数int sum = 0;for(int i = s; i >= 1; -- i){if(dp[i]){++ sum;}}ans = max(ans, sum);
}
//搜索
void dfs(int x, int y){if(y > m){solve();return;}for(int i = x + 1; i <= n; ++ i){f[i] = 1;dfs(i, y + 1);f[i] = 0;}
}
http://www.lryc.cn/news/448457.html

相关文章:

  • MYSQL-查看表中字段属性语法(三)
  • 第三讲 part 3:前端处理LINK3D - 代码解析 - 从main出发看总体流程(ROS1改为ROS2)
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——15.红黑树
  • 【C++】Eclipse技巧汇总
  • Golang | Leetcode Golang题解之第430题扁平化多级双向链表
  • Java实现找色和找图功能
  • linux脚本工具
  • MySQL之基础篇
  • 13年408计算机考研-计算机网络
  • camera2 + MediaRecorder 实现的分段循环录像功能
  • LeetCode 每日一题 2024/9/23-2024/9/29
  • 知识付费APP开发指南:基于在线教育系统源码的技术详解
  • 物联网智能项目全面解析
  • 【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式结构重用
  • Springboot3保存日志到数据库
  • 叉车高位显示器无线摄影,安装更加便捷!
  • 模板的特化
  • PCIE总线架构
  • Adobe PR与AE的区别与联系(附网盘地址)
  • 【QT 5 调试软件+Linux下调用脚本shell-无法调度+目录拼写+无法找目录+sudo权限(2)+问题解决方式+后续补充】
  • 企业防泄密妙招有哪些?请记住这8招!超实用,学起来!
  • pytorch千问模型源码分析
  • 滚雪球学SpringCloud[1.3]:SpringCloud环境搭建
  • 9.28今日错题解析(软考)
  • 【Vue】以RuoYi框架前端为例,ElementUI封装图片上传组件——将图片信息转成base64后提交到后端保存
  • 【Linux】驱动的基本架构和编译
  • 1013. 将数组分成和相等的三个部分 数组切分
  • 【深度学习】—— 自动微分、非标量变量的反向传播、 分离计算、 Python控制流的梯度计算
  • Java项目实战II基于Java+Spring Boot+MySQL的大学城水电管理系统(源码+数据库+文档)
  • Vue 组件的三大组成部分详解