题目

Maxtir 最近买了一个背包。

Maxtir 有一个容量为 m 的背包。Sao 有 n 种物品,第 i 种物品的体

积为 ai ,价值为 b i 。Sao 的每种物品都有无限多件,Maxtir 可以任取。

在不超过背包容量的前提下,Maxtir 要求所能获得的最大价值。

输入输出

输入格式

第1行输入两个正整数 n , m 。

第 2 至 n + 1行,每行输入两个正整数 ai , b i 。

输出格式

一个整数,表示 Maxtir 所能获得的最大价值。

输入样例#1

2 15

3 2

5 3

输出样例#1

10

输入样例#2

3 70

71 100

69 1

1 2

140

输入/输出样例#3

见下发文件 backpack3.in/backpack3.out

数据范围

对于 20% 的数据, n , m ≤ 103 。

对于 40% 的数据, n , m ≤ 10 4 , ai , b i ≤ 10 。

对于 60% 的数据, n , m ≤ 105 。

对于 100% 的数据, n ≤ 10 6 , m ≤ 10 16 , ai , b i ≤ 100 。

分析

本人40pts的方法就不说了,放下正确分析:

按照NOIP的惯例,此题是一道送分题。

对于 60% 的数据,我们可以发现其实 n不大于100 ,若两种物品 ai 相同,

则 bi 较小的应该被舍弃,复杂度 O(am) 。

对于100 % 的数据,我们先证明一个引理:

引理:给定任意 n 个整数,它们之中存在若干个整数的和为 n 的

倍数。

证明:设 n 个整数为 a 1 , a 2 , a3 ,……, a n , \(Sn=\sum_{i=1}^{n}ai\)。

对于 S0 , S1 , S 2 , S 3 ,…… , Sn 这 n+1 个数,至少有两个数模 n 相同,则

这两个数的差为 n 的倍数,证毕。

回到题目,设第 s 种物品为性价比最高的物品之中 ai 最小的物

品。设最优情况下有 x 件非第 s 种物品,则我们可以证明:

定理:存在一种最优情况使得 x < as 。

证明:若 x >= as ,则存在若干件物品的 ai 和为 as 的倍数,将这些物

品用第 s 种物品替换一定不劣。

于是这 x 件非第 s 种物品的 ai 和最大为 100a s 。于是我们选择

(n/as)-100 件第 s 种物品,剩下的空间做完全背包,复杂度 O(a^3)。

代码

#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int M = 105;
const int N = 2e4 + 50;
ll m, ans, cnt, f[N];
int n, p[M][M]; struct Data {
int x, y; Data(int _x = 0, int _y = 0): x(_x), y(_y) {} bool operator < (const Data &t) const {
int flag = x * t.y - y * t.x;
if (flag == 0) return x < t.x;
return flag < 0;
}
} a[M]; int main() {
freopen("backpack.in", "r", stdin);
freopen("backpack.out", "w", stdout);
scanf("%d%I64d", &n, &m);
for (int x, y; n--; ) {
scanf("%d%d", &x, &y);
p[x][y] = 1;
}
n = 0;
for (int x = 1; x <= 100; x++) {
for (int y = 100; y >= 1; y--) {
if (p[x][y]) {
a[++n] = Data(x, y);
break;
}
}
}
for (int i = 2; i <= n; i++)
if (a[i] < a[1]) swap(a[i], a[1]);
cnt = m / a[1].x - 100;
ans = cnt * a[1].y;
m -= cnt * a[1].x;
for (int i = 1; i <= n; i++)
for (int j = a[i].x; j <= m; j++)
f[j] = max(f[j], f[j - a[i].x] + a[i].y);
printf("%I64d\n", ans + f[m]);
return 0;
}

NOIP模拟day1-T1(完全背包)的更多相关文章

  1. HGOI20180817 (NOIP模拟Day1 task)

    HGOI自测 初测:150=80+20+50 rank1~rank3(并列3个rank1,所以我是rank3 qwq) 今日分突然想简约 CF359A Table https://www.luogu. ...

  2. 洛谷P1328==codevs3716 生活大爆炸版石头剪刀布[NOIP 2014 day1 T1]

    P1328 生活大爆炸版石头剪刀布 1.8K通过 2.6K提交 题目提供者2014白永忻 标签模拟NOIp提高组2014 难度普及- 提交该题 讨论 题解 记录 最新讨论 Who can help m ...

  3. 20161007 NOIP 模拟赛 T1 解题报告

    排序 3.1 题意描述 众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能.常见的排序算法有冒泡 排序.归并排序.快速排序.奇偶排序.猴子排序.梳排序.鸡尾酒排序.臭皮匠排序等. 在这里,介绍 ...

  4. noip 2016 day1 T1玩具谜题

    题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...

  5. 【2019.7.20 NOIP模拟赛 T1】A(A)(暴搜)

    打表+暴搜 这道题目,显然是需要打表的,不过打表的方式可以有很多. 我是打了两个表,分别表示每个数字所需的火柴棒根数以及从一个数字到另一个数字,除了需要去除或加入的火柴棒外,至少需要几根火柴棒. 然后 ...

  6. 【2019.7.25 NOIP模拟赛 T1】变换(change)(思维+大分类讨论)

    几个性质 我们通过推式子可以发现: \[B⇒AC⇒AAB⇒AAAC⇒C\] \[C⇒AB⇒AAC⇒AAAB⇒B\] 也就是说: 性质一: \(B,C\)可以相互转换. 则我们再次推式子可以发现: \[ ...

  7. 20161022 NOIP模拟赛 T1 解题报告

    旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...

  8. 20161023 NOIP 模拟赛 T1 解题报告

    Task 1.纸盒子 (box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一 ...

  9. 20161004 NOIP 模拟赛 T1 解题报告

    第1题  小麦亩产一千八 [问题描述] “有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾……”,话说HYSBZ(Hengyang School for Boys & Zy) ...

  10. 2014.7建兰NOIP模拟Day1 Running

    突然间翻到着题,想想那时的我真是垃圾,这么简单的tarjan缩点+树上倍增都不会..还想了3h+.. 什么时候写了它吧...

随机推荐

  1. Xamarin.Forms 自定义控件(呈现器和效果)

    Xamarin.Forms 使用目标平台的本机控件呈现用户界面,从而让 Xamarin.Forms 应用程序为每个平台保留了相应的界面外观.凭借效果,无需进行自定义呈现器实现,即可自定义每个平台上的本 ...

  2. 【数论】[素数筛,phi]P3601签到题

    题目描述 给出l,r,要求求出\(\sum_{i = l}^r (i - phi[i]) mod 666623333\) \(1\leq l\leq r\leq 10^{12}\),\(r - l \ ...

  3. 【CF55D】Beautiful numbers

    [CF55D]Beautiful numbers 题面 洛谷 题解 考虑到如果一个数整除所有数那么可以整除他们的\(lcm\),而如果数\(x\)满足\(x\bmod Lcm(1,2...,9)=r\ ...

  4. AttributeError: module 'pytest' has no attribute 'allure'

    解决 pip3 uninstall pytest-allure-adaptor pip3 install allure-pytest 参考: https://www.cnblogs.com/lansa ...

  5. SpringAOP ApectJ 动态代理

    参考链接:https://docs.spring.io/spring/docs/4.3.13.RELEASE/spring-framework-reference/htmlsingle/#aop ht ...

  6. CAP原则 (阿里)

    CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency).可用性(Availability).分区容错性(Partition tolerance).CAP 原则指的是,这三 ...

  7. docker使用dnnmmp安装gocron

    使用dnnmmp安装mysql和phpmyadmin默认使用dnnmmp_default网络,因为在安装其他依赖mysql的应用时,需指定网络 ,同时需指定mysql名称 原命令: docker ru ...

  8. 003 okhttp超时与缓存

    上文的介绍都没添加,如果要添加,则按照下面的方式设置. File sdcache = getExternalCacheDir(); int cacheSize = 10 * 1024 * 1024; ...

  9. Kafka的安装与使用(转)

    9.1 Kafka 基础知识 9.1.1 消息系统 点对点消息系统:生产者发送一条消息到queue,一个queue可以有很多消费者,但是一个消息只能被一个消费者接受,当没有消费者可用时,这个消息会被保 ...

  10. config:fail,Error: 系统错误,错误码:63002,invalid signature [20191104 17:18:1

    需要检查下后端有没有缓存到redis.这个很重要不然也会报这个错