天平

2024-01-29 20:08
文章标签 天平

本文主要是介绍天平,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description
FJ有一架用来称牛的体重的天平。与之配套的是N(1<=N<=40)个已知质量的砝码(所有砝码质量的数值都在31位二进制内)。每次称牛时,他都把某头奶牛安置在天平的某一边,然后往天平另一边加砝码,直到天平平衡,于是此时砝码的总质量就是牛的质量(FJ不能把砝码放到奶牛的那边,因为奶牛不喜欢称体重,每当FJ把砝码放到她的蹄子底下,她就会尝试把砝码踢到FJ脸上)。天平能承受的物体的质量不是无限的,当天平某一边物体的质量大于C(1<=C<2^30)时,天平就会被损坏。
砝码按照它们质量的大小被排成一行。并且,这一行中从第3个砝码开始,每个砝码的质量至少等于前面两个砝码(也就是质量比它小的砝码中质量最大的两个)的质量的和。
FJ想知道,用他所拥有的这些砝码以及这架天平,能称出的质量最大是多少。由于天平的最大承重能力为C,他不能把所有砝码都放到天平上。
现在FJ告诉你每个砝码的质量,以及天平能承受的最大质量。你的任务是选出一些砝码,使它们的质量和在不压坏天平的前提下是所有组合中最大的。

Input
第1行: 两个用空格隔开的正整数,N和C。
第2…N+1行: 每一行仅包含一个正整数,即某个砝码的质量。保证这些砝码的质量是一个不下降序列。

Output
第1行: 一个正整数,表示用所给的砝码能称出的不压坏天平的最大质量。

Sample Input
3 15
1
10
20

Sample Output
11

Data Constraint

Hint
【样例说明】
FJ有3个砝码,质量分别为1,10,20个单位。他的天平最多只能承受质量为15个单位的物体。用质量为1和10的两个砝码可以称出质量为11的牛。这3个砝码所能组成的其他的质量不是比11小就是会压坏天平。

.
.
.
.
.
分析
一眼就能看出来用深搜,但纯深搜必然会超时,那么我们要剪枝
从后往前搜,枚举选和不选
如果现在质量超过了返回,如果剩下的砝码质量加上当前的数量还不够最优答案,返回

.
.
.
.
程序:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;
long long c,ans=0,a[100],sum[100];void dfs(int wz,long long s)
{if (s>ans) ans=s;if (s+sum[wz]<=ans) return;	if (wz<1) return;for (int i=wz;i>=1;i--)if (s+a[i]<=c) dfs(i-1,s+a[i]);
}int main()
{scanf("%d%lld",&n,&c);int js=0;for (int i=1;i<=n;i++){scanf("%lld",&a[i]);sum[i]=sum[i-1]+a[i];}dfs(n,0);printf("%lld",ans);return 0;
}

这篇关于天平的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658043

相关文章

背包问题(天平)——POJ 1837

对应POJ题目:点击打开链接 Balance Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submit  Status  Practice  POJ 1837 Description Gigel has a strange "balance" and he wa

poj 1837 Balance(01背包 天平平衡)

题目大意: 有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。 其中可以把天枰看做一个以x轴0点作为平衡点的横轴 输入: 2 4 //C 钩子数 与 G钩码数 -2 3 //负数:左边的钩子距离天平中央的距离;正数:右边的钩子距离天平中央的距离c[k] 3 4 5 8 //G个重物的质量w[i]

bootstrap实现天平效果

之前提到了,最近,孩子的幼儿园让家长体验“半日助教活动”,每个家长需要讲授15-20分钟的课程。作为一名程序员,实在没有能教的课程,只能做了一个小游戏,带着小朋友们熟悉数字。 在上一章博客中,笔者发布了九宫格中猫捉老鼠的小游戏源码,下面再把通过bootstrap实现天平效果的源码发布,供读者参考。 效果大致是这样的。通过前端代码生成一个简易的天平,天平两边分别随机生成一个数字,点击较大的数字天

3-2. 用天平找小球

三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。 输入格式: 输入在一行中给出3个正整数,顺序对应球A、B、C的重量。 输出格式: 在一行中输出唯一的那个不一样的球。 输入样例: 1 1 2 输出样例: C #include<stdio.h>int main(){int a,b,c;scanf("%d%d%d",&a,&b,&

例题6-9 天平(Not so Moblie,UVa 839)

原题链接:https://vjudge.net/problem/UVA-839 分类:树 备注:思维 前言:不得不说汝佳大大的代码十分巧妙,这次回顾还是没有写出那么好的代码。 代码如下: #include<cstdio>using namespace std;int T, balance;int dfs(){int wl, dl, wr, dr;scanf("%d%d%d%d", &w

【券商报告】21年1季度债券市场展望:摇摆的天平——附下载链接

来源 | 兴业证券 20年4季度:大类资产表现,从股商品强势债弱到资产普涨,永煤事件爆发是转折点,流动性悲观预期的改善是主要 推手。20年债市曲线:牛陡(1-4月)—熊平(5-11月中)—牛陡(11月中以来),流动性才是核心矛盾而非基本面。                 如需查看完整报告和报告下载或了解更多,公众号:参一江湖

在120枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,最坏情况下,能不能只比较5次就检测出这枚假币?

能 这道题目我想先通过另外一道题目引入我的方法: 在13枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,最坏情况下,能不能只比较3次就检测出这枚假币? 将13枚硬币分为三组 ABCD  EFGH  IJKLM 这里引入一个概念,每次天平倾斜方向称之为X方向、Y方向、和平衡 X方向不一定就是向左倾斜,

12硬币中有一个不知道轻重的假币,用天平将它找出来

问题1:假设有8个硬币,里面有一个硬币是假币,并且知道它是重了还是轻了(假设是轻了),现在给你一个天平,要求用最小次数将这个硬币找出来. 这时候可以用一种类似二分法的算法来找出这个假币.将左边4个和右边4个比较,因为知道硬币是轻了,所以很快就能确定那堆硬币里面有假币,这时候问题的规模由原来的8变成了4....然后对4个硬币也采用同样的办法...最终3次找出那个假硬币 问

zjut 1722 天平2

http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1722 没想到在zjut Oj 上超内存一直把我判成是RE,无语……之后才发现,改过后就Ac了,不错的题目 #include <cstdio>#include <cstring>#include <iostream>#include <vector>#include <algorithm