当前位置:网站首页>[蓝桥杯2021初赛] 砝码称重
[蓝桥杯2021初赛] 砝码称重
2022-07-06 09:14:00 【%xiao Q】
题目
题目描述
你有一架天平和N 个砝码,这N 个砝码重量依次是W1, W2, … , WN。
请你计算一共可以称出多少种不同的重量?
注意砝码可以放在天平两边。
输入格式
输入的第一行包含一个整数N。
第二行包含N 个整数:W1, W2, W3, … , WN。
对于50% 的评测用例,1 ≤ N ≤ 15。
对于所有评测用例,1 ≤ N ≤ 100,N 个砝码总重不超过100000。
输出格式
输出一个整数代表答案。
输入样例
3
1 4 6
输出样例
10
分析
这道题暴力搜索肯定是会超时的,dfs大概的话,能过50%的点。
这题的正解为dp(奈何菜鸡不会dp),那么接下来就来分析dp的做法:
- 状态表示f[i][j]:表示前i个砝码中选,称出的重量为j的状态,为1表示可以称出,为0则不能称出。
- 状态转移:
- a[i] == j,那么f[i][j]一定可以被称出
- a[i] != j,那么就可以从f[i - 1][j],f[i - 1][abs(j - a[i])](本质为f[i - 1][j - a[i]],为了防止出现负的下标,所以取绝对值),f[i - 1][j + a[i]]这3种情况中转移过来。
f[i - 1][j]:i - 1个砝码能称出的,i个也能称出
f[i - 1][j - a[i]]:加上当前的砝码
f[i - 1][j + a[i]]:减去当前的砝码
满足3种的任意一种,即可判断f[i][j]的重量为j的能否被称出
参考代码1(dfs)---- 过50%的样例(O(3^n))
#include <iostream>
#include <cstdio>
#include <set>
#include <map>
#include <vector>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <algorithm>
#include <unordered_map>
#define LL long long
#define rep(i, a, b) for(int i = a; i <= b; i++)
#define reps(i, a, b) for(int i = a; i < b; i++)
#define pre(i, a, b) for(int i = b; i >= a; i--)
using namespace std;
const int N = 110, M = 1e5 + 10;
int n, ans = 0;
int a[N];
bool st[M];
void dfs(int u, int sum)
{
if(!st[sum] && sum > 0) ans++, st[sum] = true;
if(u == n + 1) return ;
dfs(u + 1, sum + a[u]);
dfs(u + 1, sum - a[u]);
dfs(u + 1, sum);
}
int main()
{
cin >> n;
rep(i, 1, n) cin >> a[i];
dfs(1, 0);
cout << ans << endl;
return 0;
}
参考代码2(dp)---- O(nm)
#include <iostream>
#include <cstdio>
#include <set>
#include <map>
#include <vector>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <algorithm>
#include <unordered_map>
#define LL long long
#define rep(i, a, b) for(int i = a; i <= b; i++)
#define reps(i, a, b) for(int i = a; i < b; i++)
#define pre(i, a, b) for(int i = b; i >= a; i--)
using namespace std;
const int N = 110, M = 1e5 + 10;
int n, m;
int a[N];
int f[N][M];
int main()
{
cin >> n;
rep(i, 1, n) cin >> a[i], m += a[i];
rep(i, 1, n)
rep(j, 1, m)
{
if(a[i] == j) f[i][j] = 1;
else f[i][j] = f[i - 1][j] | f[i - 1][abs(j - a[i])] | f[i - 1][j + a[i]];
}
int ans = 0;
rep(i, 1, m)
if(f[n][i]) ans++;
cout << ans << endl;
return 0;
}
边栏推荐
- MySQL主從複制、讀寫分離
- Ansible实战系列三 _ task常用命令
- @Controller, @service, @repository, @component differences
- A brief introduction to the microservice technology stack, the introduction and use of Eureka and ribbon
- In the era of DFI dividends, can TGP become a new benchmark for future DFI?
- Installation and use of MySQL under MySQL 19 Linux
- Did you forget to register or load this tag
- Swagger, Yapi interface management service_ SE
- [free setup] asp Net online course selection system design and Implementation (source code +lunwen)
- 自动机器学习框架介绍与使用(flaml、h2o)
猜你喜欢
安装numpy问题总结
解决:log4j:WARN Please initialize the log4j system properly.
QT creator shape
QT creator design user interface
Summary of numpy installation problems
In the era of DFI dividends, can TGP become a new benchmark for future DFI?
Installation and use of MySQL under MySQL 19 Linux
Navicat 導出錶生成PDM文件
[recommended by bloggers] background management system of SSM framework (with source code)
连接MySQL数据库出现错误:2059 - authentication plugin ‘caching_sha2_password‘的解决方法
随机推荐
1. Mx6u learning notes (VII): bare metal development (4) -- master frequency and clock configuration
解决安装Failed building wheel for pillow
01项目需求分析 (点餐系统)
Punctual atom stm32f103zet6 download serial port pin
Data dictionary in C #
Ansible实战系列一 _ 入门
Ansible practical Series III_ Task common commands
Use dapr to shorten software development cycle and improve production efficiency
AI benchmark V5 ranking
【博主推荐】C#MVC列表实现增删改查导入导出曲线功能(附源码)
Installation and use of MySQL under MySQL 19 Linux
Neo4j installation tutorial
Error reporting solution - io UnsupportedOperation: can‘t do nonzero end-relative seeks
Knowledge Q & A based on Apache Jena
Introduction and use of automatic machine learning framework (flaml, H2O)
QT creator uses Valgrind code analysis tool
Ansible实战系列三 _ task常用命令
The virtual machine Ping is connected to the host, and the host Ping is not connected to the virtual machine
虚拟机Ping通主机,主机Ping不通虚拟机
Why is MySQL still slow to query when indexing is used?