upc7834 送礼物

题目描述

作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了。某神牛有N个礼物,且异常沉重,但是GY的力气也异常的大(-_-b),他一次可以搬动重量和在w(w<=2^31-1)以下的任意多个物品。GY希望一次搬掉尽量重的一些物品,请你告诉他在他的力气范围内一次性能搬动的最大重量是多少。

输入

第一行两个整数,分别代表W和N。
以后N行,每行一个正整数表示G[i],G[i]<= 2^31-1。

输出

仅一个整数,表示GY在他的力气范围内一次性能搬动的最大重量。

样例输入

复制样例数据

20 5
7
5
4
18
1

样例输出

19

提示

对于20%的数据 N<=26
对于40%的数据 W<=2^26
对于100%的数据 N<=45 W<=2^31-1

最多45件礼物,如果直接暴力枚举就会超时。将礼物分成两半,分别枚举出两半中的各种组合,然后利用二分进行匹配,寻找最优解。

#include "bits/stdc++.h"

using namespace std;
const int maxn = 1e7 + 11;
typedef long long ll;
ll s[100];
ll sum[maxn];
ll ans = 0;
int tot = 0;
ll w, n;

void dfs1(int now, ll val) {
    if (now > n) {
        sum[++tot] = val;
        return;
    }
    if (val + s[now] <= w)
        dfs1(now + 1, val + s[now]);
    dfs1(now + 1, val);
}

int mid;

void dfs2(int now, ll val) {
    if (now >= mid) {
        ll l = lower_bound(sum + 1, sum + tot + 1, w - val) - sum;
        ans = max(ans, val + sum[l-1]);
        return;
    }
    if (val + s[now] <= w) dfs2(now + 1, val + s[now]);
    dfs2(now + 1, val);
}

int main() {
    //freopen("input.txt", "r", stdin);
    cin >> w >> n;
    for (int i = 1; i <= n; i++) {
        cin >> s[i];
    }
    sort(s + 1, s + 1 + n);
    mid = (n + 1) >> 1;
    dfs1(mid, 0);
    sort(sum + 1, sum + tot + 1);
    dfs2(1, 0);
    cout << ans << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/albert-biu/p/10111177.html

时间: 2024-10-10 11:45:32

upc7834 送礼物的相关文章

微信里投票送礼物充值活动怎么做的什么系统?

你是不是最近总被人让我帮着他们亲戚家的孩子投票,说是幼儿园举办的活动,让我帮着投投票.要说麻烦吧,也不麻烦,就是总在想这有什么用呢?那些孩子我一个都不认识,说白了只是帮他们投票的其中一个水军而已. 今天我姐的孩子参加幼儿园投票活动,让给拉拉票,自己投完了还要去群里发一圈好友发一遍,票数不够还要心甘情愿的买礼物,关键是下面买礼物的人还显示,不买还不行,当时心想这个一个孩子刷200元的礼物,50个孩子最起码也要上万啊,这生意绝了! 我小侄女的幼儿园人多,200个小盆友左右,平时她在班级表现的比较积成

仿QQ空间送礼物功能

本文链接:http://www.cnblogs.com/dengxinglin/archive/2013/03/23/2976737.html 我们在QQ空间里面有一个送礼物的功能,显示了最近过生日的人.我们只要把鼠标放到如下图的生日快乐那标签上,就会显示可以给该人送的礼物!! 单击其中的一个礼物,就会马上送出去.但是我们现在是要说的还有单击更多的时候,会另外弹出一个新的窗口在当前页面最前面!如下图显示: 怎么实现那上面的功能呢? 就是把鼠标放上去,弹出一天tips,单击tips里面的控件,之后

送礼物给女朋友浪漫

看到网上许多兄弟为送女朋友什么礼物而烦恼,尤其是一些整天和计算机打交道的弟兄们,和机器打交道时间长了,都那个...了,看着真让我这个整天面对机器的前辈着急呀,想起当年俺好想有高人指点的感觉,就觉得应该做件造福弟兄们的事,不能让外行人把我们做计算机的看那个了!下面这篇短文就是兄弟我的研究成果哟!)时代在发展,一人眼光有限,希望兄弟们继续补充和修正,打造出我们自己的宝典来哦. 要给女朋友送礼,先得了解女人的需求.而没结婚的女人和结了婚的女人需求在程度上会有区别,倾向性会不同,但女人的本质是不会变的.

TYVJ1340 送礼物

P1340 送礼物 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了.某神牛有N个礼物,且异常沉重,但是 GY的力气也异常的大(-_-b),他一次可以搬动重量和在w(w<=2^31-1)以下的任意多个物品.GY希望一次搬掉尽量重的一些物品,请你 告诉他在他的力气范围内一次性能搬动的最大重量是多少. 输入格式 第一行两个整数,分别代表W和N.以后N行

CH2401 送礼物(双向dfs)

CH2401 送礼物 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了.某神牛有N个礼物,且异常沉重,但是GY的力气也异常的大(-_-b),他一次可以搬动重量和在w(w<=2^31-1)以下的任意多个物品.GY希望一次搬掉尽量重的一些物品,请你告诉他在他的力气范围内一次性能搬动的最大重量是多少. 输入格式 第一行两个整数,分别代表W和N.以后N行,每行一个正整数表示G[i],G[i]<= 2^31-1. 输出格式 仅一个整数,表

html5游戏开发-零基础开发《圣诞老人送礼物》小游戏

开言: 以前lufy前辈写过叫" HTML5游戏开发-零基础开发RPG游戏"的系列文章,在那里面我学习了他的引擎以及了解了游戏脚本.自从看了那几篇文章,我便对游戏开发有了基本的认识.今天我也以零基础为视点,为大家讲述如何开发一款简单的游戏.希望大家看了这篇文章,能使你对理解游戏开发有帮助. 你可以先测试一下游戏: http://lufylegend.com/lufylegend_developers/yorhom_Christmas/index.html 1,如何进行游戏开发 1.1游

送礼物(二分答案+单调队列)

QUESTION: JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物.萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都排成一列,而且相邻的礼物之间有一种神秘的美感.于是,JYY决定从中挑选连续的一些礼物,但究竟选 哪些呢?假设礼品店一共有\(N\)件礼物排成一列,每件礼物都有它的美观度.排在第\(i\)(\(1\leq i \leq N\))个位置的礼物美观度为正整数\(A_i\).JYY决定选出其中连续的一段,即编号为礼物\(i\),\(i+1\),....,\(j-

Android 仿映客直播间给主播发送礼物(实现连击效果)

效果图 类库的介绍 org.dync.giftlibrary.widget GiftAnimationUtil.java 动画类GiftControl.java 给外部调用的类(核心)GiftFrameLayout.java 礼物布局类GiftModel.java 给礼物布局填充数据类以上是礼物动画一(推荐使用礼物动画一,在demo中的Gift1Activity.java使用) LeftGiftControl.java 给外部调用的类(核心)LeftGiftsItemLayout.java 礼物

微信送礼物投票系统的详细解答

就目前来说,市场上的第三方微信投票系统种类很多,功能不一鱼龙混杂,功能很多的情况下有一些细微的区别,对于用户来说选择有一定的难度,下面我就来简单介绍一下微信投票活动大家经常关注的16个问题,对此进行详细的解答:只要能同时包括这个些功能的系统,通常都能够很好的满足活动举办方的要求,活动良好的用户体验! Q1.该投票系统可以设置每个微信用户投票次数吗? A3:可以的,可以设置一次活动每个微信用户的投票数,可设置每个微信用户每天的投票数!并且取消关注自动减掉此用户投票的所有记录,做到了自动减票的功能.