链接:

文章目录

  • 题目描述
  • 题解:
  • 代码:
时间限制: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日 失衡天平相关推荐

  1. 牛客网 每日一题 7月23日题目精讲—wpy的请求

    来源:牛客网: 文章目录 wpy的请求 题解: 代码: wpy的请求 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge ...

  2. 牛客网SQL刷题笔记(MySQL)

    牛客网SQL刷题笔记(MySQL) 此博客集合LeetCode.牛客网常见的题型及其解法,侵删 目录 牛客网SQL刷题笔记(MySQL) 类型1:查找排名第几的数据 SQL2 查找入职员工时间排名倒数 ...

  3. 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类...

    不多说,直接上干货! 牛客网Java刷题知识点之关键字static static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概 ...

  4. 牛客网Java刷题知识点之构造函数可以调用一般函数,但是一般函数不可以直接调用构造函数...

    不多说,直接上干货! 通过 牛客网Java刷题知识点之构造函数是什么.一般函数和构造函数什么区别呢.构造函数的重载.构造函数的内存图解 我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会 ...

  5. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  6. 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  7. 牛客网Veirlog刷题答案目录(持续更新)

    牛客网Veirlog刷题答案目录(持续更新) 基础篇 进阶篇 基础篇 1.VL1--四选一多路选择器 2.VL2--异步复位的串联T触发器 3.VL3--奇偶校验 4.VL4--移位运算与乘法 5.V ...

  8. 牛客网刷算法题的输入输出(C++)

    内容简述 该篇文章将对牛客网刷题中关于输入输出的一些问题作一个总结.每年互联网公司的招聘都必不可少会有算法题,因此平时很多人都会去一些刷题网站进行刷题来学习.这里面用的比较多的刷题网站是leetcod ...

  9. 【百日冲大厂】第十篇,牛客网选择题+编程题井字棋+密码强度等级

    前言: 大家好,我是良辰丫,刷题的第十篇,牛客网选择题+编程题井字棋+密码强度等级.

最新文章

  1. 标题1100: 简略计算器
  2. Spring.net 模块组成
  3. boost::geometry::detail::overlay::get_ring用法的测试程序
  4. matlab gui学习手记_MATLAB论坛不可错过的30例GUI源代码
  5. (96)FPGA时序违规案例(一)
  6. apex您所在的地区目前不提供此物品_《APEX英雄》入门指南传奇篇-命脉
  7. POJ 3262 Protecting the Flowers 贪心(性价比)
  8. java enum转ini_JAVA中用XML实现INI文件格式的解决方
  9. linux内核被加载的过程
  10. 2014.12.03 页面控件
  11. 计算机以弧计算和以度计算公式,弧度换算角度[角度换算弧度计算器]_弧度数计算公式...
  12. Mangos魔兽世界服务端初探(1)--游戏服务端主体结构与消息分发
  13. UML基础(八)--构件图
  14. 在Excel表中进行度分秒单位转换
  15. 360数科知微实验室发布反诈报告:揭秘黑灰产数据流转真相
  16. verilog简单驱动VGA
  17. 把撒哈拉沙漠变成一个太阳能农场,这可能吗?
  18. Maven中央仓库配置文件
  19. 穿越到东汉末年的Jackson
  20. clickhouse日志级别

热门文章

  1. 成年人改变生活的方式,都是从它开始
  2. mysql中如何计算党龄_党员的党龄如何计算?
  3. C语言中比较大小的函数模板,C语言中实现模板函数小结 : 不敢流泪
  4. tableau三轴合并_《Tableau数据可视化实战》——1.12节合并不同数据源-阿里云开发者社区...
  5. c++STL的反向迭代器
  6. java打印设备集中管理_Kafka+Log4j实现日志集中管理
  7. [Redis6]NoSQL数据库简介_特点
  8. [C++11]对模板右尖括号的优化
  9. 简单的01背包和完全背包
  10. Aladdin and the Flying Carpet (素数打表+正整数的唯一分解定理,找因数对)