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

[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.kler.cn/news/324884.html

相关文章:

  • 考研数据结构——C语言实现冒泡排序
  • Brave编译指南2024 MacOS篇-引言与准备工作(一)
  • 题库系统平台开发功能解析
  • leetcode每日一题day17(24.9.27)——每种字符最少取k个
  • 【漏洞复现】Ruoyi框架漏洞复现总结
  • Leetcode 1235. 规划兼职工作
  • uniapp学习(002 常用的内置组件)
  • springboot整合openfeign
  • XSS(内含DVWA)
  • 如何制作Linux系统盘
  • Unity给物体添加网格(Wire)绘制的方法
  • Dubbo快速入门(一):分布式与微服务、Dubbo基本概念
  • 推荐一款开源的链路监控系统
  • java 框架组件
  • python习题1
  • 半导体制造过程中设备通信的高级概述
  • 从 Tesla 的 TTPoE 看资源和算法
  • 第一弹:llama.cpp编译
  • macOS安装MySQL以后如何配置环境变量
  • MongoDB 数据库服务搭建(单机)
  • 指定PDF或图片多个识别区域,识别区域文字,并批量对PDF或图片文件改名
  • 【H2O2|全栈】关于CSS(7)CSS基础(六)
  • VMware 虚拟机配置固定 IP
  • MyBatis-Plus自动填充字段
  • Ubuntu 上安装 Miniconda
  • 华为FreeBuds 6i怎么佩戴不容易掉?
  • 人工智能时代,程序员如何保持核心竞争力
  • 柯桥学英语商务口语中老外最爱说的“what‘s up“是什么意思?回答错超尴尬!
  • R包:ggheatmap热图
  • linux 下80端口被占用