牛客网 【每日一题】6月10日 失衡天平
链接:
文章目录
- 题目描述
- 题解:
- 代码:
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
终于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
对于每个物品我们都要做出选择:放在天平的左边,放在天平的右边,不选择。
那么我们就可以去找递推式:
dp[i][j]表示前i样物品进行选择后,此时天平两端的重量差为j的时候,最大质量是多少,我们定义这个质量差为 左减右,那么左边放物品质量差增大,右边放质量差变小
我们想想dp[i][j]是怎么来的?
(a[i]表示第i件物品的质量)
如果我们选择第i件物品,放在天平的左边,那么dp[i][j]就是从dp[ i -1 ] [ j - a [ i ] ]来的(将第i件物品选择前,质量差为j-a[i])转移过来
同理:如果放在天平的右边,那么dp[i][j]就是dp[i-1][j+a[i]]转移而来的
如果不放,那就是dp[i-1][j]直接转移过来
我们要找到最大的情况,就是上面三个取最大值
dp[i][j] = max(dp [ i -1 ] [ j ] , d p [ i - 1 ][ j - a [ i ] ] + a [ i ] ,d p [ i - 1 ] [j +a [ i] ] + a [ i ] )
因为题目有限定这个质量差的上限,所以最后我们求出这个范围内的最大质量即可
max(sum,dp[n][i])
大致就是这样
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+4;
int dp[100][maxn];
int a[maxn];
int max(int a,int b,int c)
{if(a>=b&&a>=c)return a;else if(b>=a&&b>=c)return b;else if(c>=b&&c>=a)return c;
}
int main()
{memset(dp,-0x3f,sizeof(dp));
// cout<<dp[0][0]<<endl;int n,m;cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];int sum=0;dp[0][0]=0;for(int i=1;i<=n;i++)for(int j=0;j<=maxn;j++){dp[i][j] = max(dp[i-1][j],dp[i-1][abs(j-a[i])]+a[i],dp[i-1][j+a[i]]+a[i]);} for(int i=0;i<=m;i++){sum=max(sum,dp[n][i]);}printf("%d",sum);return 0;
}
牛客网 【每日一题】6月10日 失衡天平相关推荐
- 牛客网 每日一题 7月23日题目精讲—wpy的请求
来源:牛客网: 文章目录 wpy的请求 题解: 代码: wpy的请求 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge ...
- 牛客网SQL刷题笔记(MySQL)
牛客网SQL刷题笔记(MySQL) 此博客集合LeetCode.牛客网常见的题型及其解法,侵删 目录 牛客网SQL刷题笔记(MySQL) 类型1:查找排名第几的数据 SQL2 查找入职员工时间排名倒数 ...
- 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类...
不多说,直接上干货! 牛客网Java刷题知识点之关键字static static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概 ...
- 牛客网Java刷题知识点之构造函数可以调用一般函数,但是一般函数不可以直接调用构造函数...
不多说,直接上干货! 通过 牛客网Java刷题知识点之构造函数是什么.一般函数和构造函数什么区别呢.构造函数的重载.构造函数的内存图解 我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会 ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别
不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...
- 牛客网Veirlog刷题答案目录(持续更新)
牛客网Veirlog刷题答案目录(持续更新) 基础篇 进阶篇 基础篇 1.VL1--四选一多路选择器 2.VL2--异步复位的串联T触发器 3.VL3--奇偶校验 4.VL4--移位运算与乘法 5.V ...
- 牛客网刷算法题的输入输出(C++)
内容简述 该篇文章将对牛客网刷题中关于输入输出的一些问题作一个总结.每年互联网公司的招聘都必不可少会有算法题,因此平时很多人都会去一些刷题网站进行刷题来学习.这里面用的比较多的刷题网站是leetcod ...
- 【百日冲大厂】第十篇,牛客网选择题+编程题井字棋+密码强度等级
前言: 大家好,我是良辰丫,刷题的第十篇,牛客网选择题+编程题井字棋+密码强度等级.
最新文章
- 标题1100: 简略计算器
- Spring.net 模块组成
- boost::geometry::detail::overlay::get_ring用法的测试程序
- matlab gui学习手记_MATLAB论坛不可错过的30例GUI源代码
- (96)FPGA时序违规案例(一)
- apex您所在的地区目前不提供此物品_《APEX英雄》入门指南传奇篇-命脉
- POJ 3262 Protecting the Flowers 贪心(性价比)
- java enum转ini_JAVA中用XML实现INI文件格式的解决方
- linux内核被加载的过程
- 2014.12.03 页面控件
- 计算机以弧计算和以度计算公式,弧度换算角度[角度换算弧度计算器]_弧度数计算公式...
- Mangos魔兽世界服务端初探(1)--游戏服务端主体结构与消息分发
- UML基础(八)--构件图
- 在Excel表中进行度分秒单位转换
- 360数科知微实验室发布反诈报告:揭秘黑灰产数据流转真相
- verilog简单驱动VGA
- 把撒哈拉沙漠变成一个太阳能农场,这可能吗?
- Maven中央仓库配置文件
- 穿越到东汉末年的Jackson
- clickhouse日志级别
热门文章
- 成年人改变生活的方式,都是从它开始
- mysql中如何计算党龄_党员的党龄如何计算?
- C语言中比较大小的函数模板,C语言中实现模板函数小结 : 不敢流泪
- tableau三轴合并_《Tableau数据可视化实战》——1.12节合并不同数据源-阿里云开发者社区...
- c++STL的反向迭代器
- java打印设备集中管理_Kafka+Log4j实现日志集中管理
- [Redis6]NoSQL数据库简介_特点
- [C++11]对模板右尖括号的优化
- 简单的01背包和完全背包
- Aladdin and the Flying Carpet (素数打表+正整数的唯一分解定理,找因数对)