当前位置: 首页 > news >正文

网站制作文件营销型网站 易网拓

网站制作文件,营销型网站 易网拓,阿里云 wordpress博客,诸城 网站 建设题目描述 译自 CEOI2015 Day2 T1「Ice Hockey World Championship」 今年的世界冰球锦标赛在捷克举行。Bobek 已经抵达布拉格,他不是任何团队的粉丝,也没有时间观念。他只是单纯的想去看几场比赛。如果他有足够的钱,他会去看所有的比赛。不幸…

题目描述

译自 CEOI2015 Day2 T1「Ice Hockey World Championship」

今年的世界冰球锦标赛在捷克举行。Bobek 已经抵达布拉格,他不是任何团队的粉丝,也没有时间观念。他只是单纯的想去看几场比赛。如果他有足够的钱,他会去看所有的比赛。不幸的是,他的财产十分有限,他决定把所有财产都用来买门票。

给出 Bobek 的预算和每场比赛的票价,试求:如果总票价不超过预算,他有多少种观赛方案。如果存在以其中一种方案观看某场比赛而另一种方案不观看,则认为这两种方案不同。

输入格式

第一行,两个正整数 N 和 M(1≤N≤40,1≤M≤1018),表示比赛的个数和 Bobek 那家徒四壁的财产。

第二行,N 个以空格分隔的正整数,均不超过 1016,代表每场比赛门票的价格。

输出格式

输出一行,表示方案的个数。由于 N 十分大,注意:答案 ≤240。

输入输出样例

输入 #1复制

5 1000
100 1500 500 500 1000

输出 #1复制

8

说明/提示

样例解释

八种方案分别是:

  • 一场都不看,溜了溜了
  • 价格 100 的比赛
  • 第一场价格 500 的比赛
  • 第二场价格 500 的比赛
  • 价格 100 的比赛和第一场价格 500 的比赛
  • 价格 100 的比赛和第二场价格 500 的比赛
  • 两场价格 500 的比赛
  • 价格 1000 的比赛

有十组数据,每通过一组数据你可以获得 10 分。各组数据的数据范围如下表所示:

数据组号1−23−45−78−10
N≤10204040
M≤10610181061018

代码实现:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

typedef long long ll;

// 生成所有可能的子集和
vector<ll> generateSubsetSums(const vector<ll>& prices) {
    vector<ll> sums;
    int n = prices.size();
    // 枚举所有子集,使用位运算
    for (int mask = 0; mask < (1 << n); mask++) {
        ll sum = 0;
        for (int i = 0; i < n; i++) {
            if (mask & (1 << i)) {
                sum += prices[i];
            }
        }
        sums.push_back(sum);
    }
    return sums;
}

int main() {
    int N;
    ll M;
    cin >> N >> M;
    
    vector<ll> prices(N);
    for (int i = 0; i < N; i++) {
        cin >> prices[i];
    }
    
    // 将数组分成两半
    int mid = N / 2;
    vector<ll> left(prices.begin(), prices.begin() + mid);
    vector<ll> right(prices.begin() + mid, prices.end());
    
    // 生成左右两部分的所有子集和
    vector<ll> leftSums = generateSubsetSums(left);
    vector<ll> rightSums = generateSubsetSums(right);
    
    // 对右半部分的子集和进行排序,以便二分查找
    sort(rightSums.begin(), rightSums.end());
    
    ll ans = 0;
    // 使用传统for循环替代基于范围的for循环
    for (int i = 0; i < leftSums.size(); i++) {
        ll s = leftSums[i];
        if (s > M) continue;  // 超过预算,跳过
        ll target = M - s;
        // 显式指定迭代器类型,替代auto
        vector<ll>::const_iterator it = upper_bound(rightSums.begin(), rightSums.end(), target);
        // 直接计算偏移量,替代distance函数
        ans += (it - rightSums.begin());
    }
    
    cout << ans << endl;
    return 0;
}

http://www.dtcms.com/a/567904.html

相关文章:

  • 东莞网站设计建设正能量网站入口
  • 湖南北山建设集团网站centos7网站开发
  • 网站后台登陆代码销售网站建设实验报告
  • 成都企业网站seo技术做网站推广员必备的条件
  • 学校建设微网站的方案设计响应式网站建设哪里有
  • 广州市研发网站建设多少钱网站影响seo的标签
  • 自由建网站的网络程序建设网站机构
  • 网站如何做sem优化线下推广方法有哪些
  • 烟台开发区建设业联合会网站wordpress 代码规范
  • 外贸型网站建设方法wordpress留学主题
  • 重庆学校网站推广品牌高端网站设计
  • 自己怎么做wap网站wordpress手机端如何使用
  • 网站建设的思想wordpress docker中文文档
  • 金泉网做网站多少钱有哪些网站是响应式的
  • 如何做网站联盟免费建站软件哪个最好
  • 韩语网站建设注意事项做网站公司三年财务预算表
  • 安徽网站建设费用2022年最为成功的营销案例
  • 网站建设设计师的工作内容接单子做网站词
  • 网站建设一个人能做吗php7 mysql wordpress
  • iis如何添加网站做网站的参考书
  • 建设部指定招标网站网站群集约化建设
  • 免费的h5制作网站模板建设银行网站怎么能转账
  • 做一个网站的全部流程做ppt的软件
  • 接设计网站网站主页和子页风格如何统一
  • 网站负责人备案采集照具体要求wordpress新版编辑
  • 郑州企业网站推广品牌网查询
  • 以绿色为主色调的网站企业宣传推广
  • 北京cms建站系统网站建设免费域名
  • 手机制作表白网站wordpress wortd
  • 移动端网站一般宽做多大淘宝客网站空间