当前位置:网站首页>[蓝桥杯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;
}
边栏推荐
- Generate PDM file from Navicat export table
- 安装numpy问题总结
- Detailed reading of stereo r-cnn paper -- Experiment: detailed explanation and result analysis
- Request object and response object analysis
- Did you forget to register or load this tag 报错解决方法
- When you open the browser, you will also open mango TV, Tiktok and other websites outside the home page
- windows下同时安装mysql5.5和mysql8.0
- 数数字游戏
- CSDN blog summary (I) -- a simple first edition implementation
- [recommended by bloggers] C WinForm regularly sends email (with source code)
猜你喜欢

MySQL主從複制、讀寫分離

Neo4j installation tutorial

软件测试与质量学习笔记3--白盒测试

QT creator test

neo4j安装教程

Knowledge Q & A based on Apache Jena

In the era of DFI dividends, can TGP become a new benchmark for future DFI?
![[recommended by bloggers] asp Net WebService background data API JSON (with source code)](/img/04/c721e6177b578b30cbbf334cb1b6c9.png)
[recommended by bloggers] asp Net WebService background data API JSON (with source code)

图像识别问题 — pytesseract.TesseractNotFoundError: tesseract is not installed or it‘s not in your path

Classes in C #
随机推荐
Did you forget to register or load this tag 报错解决方法
【博主推荐】C#生成好看的二维码(附源码)
A trip to Macao - > see the world from a non line city to Macao
[recommended by bloggers] C MVC list realizes the function of adding, deleting, modifying, checking, importing and exporting curves (with source code)
记某公司面试算法题:查找一个有序数组某个数字出现的次数
引入了junit为什么还是用不了@Test注解
QT creator custom build process
Request object and response object analysis
QT creator support platform
Why is MySQL still slow to query when indexing is used?
基于apache-jena的知识问答
數據庫高級學習筆記--SQL語句
自动机器学习框架介绍与使用(flaml、h2o)
报错解决 —— io.UnsupportedOperation: can‘t do nonzero end-relative seeks
QT creator shape
Ansible practical Series II_ Getting started with Playbook
MySQL的一些随笔记录
Dotnet replaces asp Net core's underlying communication is the IPC Library of named pipes
Postman Interface Association
[BMZCTF-pwn] 12-csaw-ctf-2016-quals hungman