题目链接

题目

题目描述

终于Alice走出了大魔王的陷阱,可是现在傻傻的她忘了带武器了,这可如何是好???这个时候,一个神秘老人走到她面前答应无偿给她武器,但老人有个条件,需要将所选武器分别放在天平的两端,若天平平衡则可以将天平上的所有武器拿走,还好这个天平锈迹斑斑,只要两端重量相差小于等于m就会保持平衡,Alice傻傻的认为越重的武器越好,求Alice最多能拿走的武器总重量。(不限操作次数)

输入描述

第一行2个整数 n, m;

第二行n个整数x,分别表示n件武器的重量。

1 <= n <= 100; 0 <= m <= 100; 1 <= x <= 100;

输出描述

一个整数,表示Alice最多能拿走的武器总重量。

示例1

输入

5 4
1 5 61 65 100

输出

132

说明

可以称两次,第1次:(1 ; 5),第二次(61 ; 65)。

示例2

输入

5 0
10 20 30 40 100

输出

200

说明

称一次,(10,20,30,40 ; 100)。

题解

知识点:背包dp。

01背包变种。设 \(dp[i][j]\) 为考虑了 \(i\) 个物品天平两遍差的绝对值为 \(j\) 的最大值。因为天平左右两边可以随时互换,我们只考虑绝对值即可。转移方程为:

\[dp[i][j] = \max(dp[i-1][j],dp[i-1][j+w[i]]+w[i],dp[i-1][|j-w[i]|]+w[i])
\]

注意边界,而且 \(j\) 的范围应该是 \([0,\sum w_i]\) ,而不是 \([0,m]\) ,因为可以放天平另一端平衡。

最后找到 \(dp[n][0\cdots m]\) 的最大值即可。

时间复杂度 \(O(n\sum w_i)\)

空间复杂度 \(O(n\sum w_i)\)

代码

#include <bits/stdc++.h>

using namespace std;

int dp[107][10007], w[107];

int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m, sum = 0;
cin >> n >> m;
for (int i = 1;i <= n;i++) cin >> w[i], sum += w[i];
memset(dp, -0x3f, sizeof(dp));///必须负无穷,不能填空气,因为可能导致所有物品都能放
dp[0][0] = 0;
for (int i = 1;i <= n;i++) {
for (int j = 0;j <= sum;j++) { ///不能到m就结束,因为可能从后面传递
dp[i][j] = dp[i - 1][j];
if (j + w[i] <= sum) dp[i][j] = max(dp[i][j], dp[i - 1][j + w[i]] + w[i]);
if (abs(j - w[i]) <= sum) dp[i][j] = max(dp[i][j], dp[i - 1][abs(j - w[i])] + w[i]);
}
}
int ans = 0;
for (int i = 0;i <= m;i++) ans = max(ans, dp[n][i]);
cout << ans << '\n';
return 0;
}

NC19158 失衡天平的更多相关文章

  1. 【Wannafly挑战赛24】【C失衡天平】

    https://www.nowcoder.com/acm/contest/186/C 题意:有n个武器,每个武器都有一个重量 Wi,有一个天平,只要两端的重量差不大于m就能达到平衡,求在天平平衡的情况 ...

  2. 失衡天平 - 简单dp

    链接:https://www.nowcoder.com/acm/contest/186/C来源:牛客网 终于Alice走出了大魔王的陷阱,可是现在傻傻的她忘了带武器了,这可如何是好???这个时候,一个 ...

  3. Nowcoder186C 失衡天平 背包

    题目传送门 题意:给你$N$个数,你可以将其划分为若干对集合(这里所说的集合允许数字重复)(即集合是两个集合两个集合出现),每对集合中两个集合所有元素的和的差的绝对值不超过$M$,可以有数字不在集合内 ...

  4. Wannafly挑战赛24游记

    Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...

  5. Wannafly挑战赛24

    A. 石子游戏 Alice和Bob在玩游戏,他们面前有n堆石子,对于这些石子他们可以轮流进行一些操作,不能进行下去的人则输掉这局游戏.可以进行两种操作:1. 把石子数为奇数的一堆石子分为两堆正整数个石 ...

  6. UVa 12166 修改天平

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. BZOJ 1111: [POI2007]四进制的天平Wag

    1111: [POI2007]四进制的天平Wag Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 223  Solved: 151[Submit][St ...

  8. UVa 1354 Mobile Computing | GOJ 1320 不加修饰的天平问题 (例题 7-7)

    传送门1(UVa): https://uva.onlinejudge.org/external/13/1354.pdf 传送门2(GOJ): http://acm.gdufe.edu.cn/Probl ...

  9. 二叉树的递归遍历 天平UVa839

    题意:输入一个树状的天平,利用杠杆原理,根据力矩是否相等(W1D1==W1D2)判断天平是否平衡 解题思路:1.由于判断天平是否平衡,当W1和W2都为0的时候,会先输入左子树,再输入右子树 2.此时的 ...

  10. bzoj:1673 [Usaco2005 Dec]Scales 天平

    Description Farmer John has a balance for weighing the cows. He also has a set of N (1 <= N <= ...

随机推荐

  1. wireshark 报文颜色

    在使用wireshark抓包分析的过程中,默认会对不同的包进行着色,截图如下: 对不同的颜色有了解,可快速的过滤包或分析请求. 菜单栏选择视图-->着色规则,即可看到不同颜色代表的含义: 大致可 ...

  2. 在Windows 版的Chrome中切换标签页

    按住Ctrl+tab键之后使用page up/ page down键左右移动!

  3. 左值,右值,引用,指针,常量,auto如何组合?

    左值,右值,引用,指针,常量,auto如何组合? 左值引用:int &a = b; 左值引用是通过使用&符号来声明的,例如int &a. 左值引用用于绑定到左值(可标识的.持久 ...

  4. [转帖]是的你没看错,HTTP3来了

    https://www.jianshu.com/p/288ce6a8ab88 简介 很多小伙伴可能还沉浸在HTTP1.1的世界无法自拔,但是时代的洪流已经带领我们来到了HTTP3的世界了.是的,你在桥 ...

  5. [转帖]TiDB BR 备份至 MinIO S3 实战

    https://tidb.net/blog/3a31d41d#3.%E9%83%A8%E7%BD%B2%20MinIO%20S3%20%E5%8F%8A%E5%A4%87%E4%BB%BD%E6%81 ...

  6. [转帖]【OS】OSWbb(OSWatcher Black Box)的简介和使用

    http://blog.itpub.net/26736162/viewspace-2142613/ OSWatcher Black Box, 简称OSW,是提供的一个小但是非常有用的工具,它通过调用O ...

  7. 申威3231_SPECJVM2008的测试结果与信创服务器对比验证

    申威3231_SPECJVM2008的测试结果与信创服务器对比验证 背景 周六找同事将在公司里的机器进行了开机. 然后验证了config.guess和config.sub 的确是可以通过复制/usr ...

  8. [转帖]IPv6地址解析库,窥探IPv6地址中包含的信息

    https://zhuanlan.zhihu.com/p/479028720 大家好,我是明说网络的小明同学. 今天和大家介绍一个IPv6 地址解析库IPv6 address Parser :http ...

  9. 查看 Oracle 数据库内 没有Primary key 类型主键的表信息

    查看 Oracle 数据库内 没有Primary key 类型主键的表信息 SELECT * FROM user_tables A WHERE NOT EXISTS ( SELECT * FROM u ...

  10. Spring缓存是如何实现的?如何扩展使其支持过期删除功能?

    前言:在我们的应用中,有一些数据是通过rpc获取的远端数据,该数据不会经常变化,允许客户端在本地缓存一定时间. 该场景逻辑简单,缓存数据较小,不需要持久化,所以不希望引入其他第三方缓存工具加重应用负担 ...