[JOI 2014 Final]IOI 馒头

link

试题分析

我们发现若是要选馒头的话则应该从馒头售价高的先装。

并且若要选择包装盒时应该选择装x个最小的时候。所以只需要贪心$+$背包即可。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
inline int read(){
    int f=1,ans=0;char c=getchar();
    while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
    while(c>=‘0‘&&c<=‘9‘){ans=ans*10+c-‘0‘;c=getchar();}
    return f*ans;
}
const int MAXN=10001;
int val[MAXN<<2],w[MAXN<<2],c[MAXN<<2],s[MAXN<<2],dp[MAXN<<2],n,m;
bool cmp(int x1,int x2){return x1>x2;}
int main(){
    memset(dp,127/3,sizeof(dp));
    n=read(),m=read();
    for(int i=1;i<=n;i++) val[i]=read();sort(val+1,val+n+1,cmp);
    for(int i=1;i<=n;i++) s[i]=s[i-1]+val[i];
    for(int i=1;i<=m;i++) w[i]=min(read(),n),c[i]=read();dp[0]=0;
    for(int i=1;i<=m;i++){
        for(int j=2*n;j>=w[i];j--) dp[j]=min(dp[j],dp[j-w[i]]+c[i]);
    }
    for(int i=2*n-1;i>=0;i--) dp[i]=min(dp[i],dp[i+1]);
    int maxn=0;
    for(int i=1;i<=n;i++) maxn=max(maxn,s[i]-dp[i]);
    cout<<maxn;
}

原文地址:https://www.cnblogs.com/si-rui-yang/p/10159320.html

时间: 2024-08-30 18:22:31

[JOI 2014 Final]IOI 馒头的相关文章

【2018.10.1】「JOI 2014 Final」年轮蛋糕

题面 一看到求“最小值的最大值”这种问题,就能想到二分了. 二分答案,然后判然后把环展开成2倍长度的链,先钦定一个起点, 原文地址:https://www.cnblogs.com/scx2015noip-as-php/p/9734669.html

loj 2759「JOI 2014 Final」飞天鼠

loj 这题有在一棵树上上升或者下降的操作,稍加分析后可以发现上升操作如果不是一定要做(指高度不足以到下一棵树或者是最后到达\(n\))就不做,下降操作也是如果不是一定要做(指到达下一棵树时高度过高)就不做,因为如果提前做了,可能会导致后面要浪费一些步数使得移动合法.然后这个移动过程就会分成两段,先是一直移动或者下降,不用上升,然后会每次上升再移动,一直到终点 先看前一段的移动,如果移动的时候正好能移到下一棵树就直接移,如果移的时候高度过高就往下移一点直到能正好移动到下一棵树上.这里对每个点记\

【2018.9.20】JOI 2017 Final T3「JOIOI 王国 / The Kingdom of JOIOI」

题目描述 为了兼顾表意清楚与简洁,我翻译时脑补了 RJOIR_{JOI}R?JOI?? 和 RIOIR_{IOI}R?IOI??,所以不要问我为啥原题找不到…… JOIOI 王国是一个 HHH 行 WWW 列的长方形网格,每个 1×11\times 11×1 的子网格都是一个正方形的小区块.为了提高管理效率,我们决定把整个国家划分成两个省 JOI 和 IOI . 我们定义,两个同省的区块互相连接,意为从一个区块出发,不用穿过任何一个不同省的区块,就可以移动到另一个区块.有公共边的区块间可以任意移

【2018.9.20】JOI 2017 Final T2「準急電車 / Semiexpress」

日文原题 题目描述 JOI 铁路公司是 JOI 国唯一的铁路公司. 在某条铁路沿线共有 $N$ 座车站,依次编号为 $1...N$. 目前,正在服役的车次按照运行速度可分为两类:高速电车(简称快车)与普通电车(简称慢车). 慢车每站都停.乘慢车时,对于任意一座车站 $i(1?i<N)$,车站 $i$ 到车站$ i+1$ 用时均为 $A$. 快车只在车站 $S_1, S_2, \ldots, S_M$?? 停车 $(1=S_1<S_2<\cdots<S_M=N)$.乘快车时,对于任意

[JOI 2015 Final]分蛋糕 2

link 试题分析 容易发现性质,选择的是一段区间,但是贪心无法去维护这件事情,所以考虑$dp$,且我们只要去设计关于$JOI$的选择. 设$dp(i,j)$为现在要在$[l,r]$区间内选择,然后就可以随便写了. #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define int long long using namespace std; inline

JOI 2020 Final 火灾

URL https://loj.ac/problem/3256 简要题意 有一个长度为n的数字序列s[1...n] 再接下来的n个时刻,按照从后往前的顺序,每个s[i]都会和s[i-1]取max(在n+1个时刻后序列肯定不会改变了,每个位置都是前缀最大值) 多次询问(t,l,r),表示第t个时刻[l,r]内数字的和 n,q 200000 解法 可以看看官方题解 https://www.ioi-jp.org/joi/2019/2020-ho/2020-ho-t5-review.pdf 的图 考虑每

BZOJ 3721 PA 2014 Final Bazarek 贪心

题目大意:有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. 思路:一个O(n)的贪心,先排序,然后O(n)预处理每个节点之前出现的最大奇数和偶数,和每一个节点之后出现的最小的奇数或者偶数,之后每个询问O(1)判断一下.注意初值. CODE: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 1000010 #d

Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 E. Excellent Engineers-单点更新、区间最值-线段树 G. Growling Gears I. Interesting Integers-类似斐波那契数列-递推思维题

先写这几道题,比赛的时候有事就只签了个到. E. Excellent Engineers 传送门: 这个题的意思就是如果一个人的r1,r2,r3中的某一个比已存在的人中的小,就把这个人添加到名单中. 因为是3个变量,所以按其中一个变量进行sort排序,然后,剩下的两个变量,一个当位置pos,一个当值val,通过线段树的单点更新和区间最值操作,就可以把名单确定. 代码: 1 //E-线段树 2 #include<iostream> 3 #include<cstdio> 4 #incl

Libre OJ P2332「JOI 2017 Final」焚风现象【差分思想】By cellur925

题目传送门 这道题开始看起来会很晕...\(qwq\).首先我们要明确题目中的海拔&&温度.温度是受海拔影响的,每次改变的是海拔,我们求的是温度. 我们开始读入的时候便可以处理出开始\(N\)位置的温度以及各个位置的海拔差.每次读入影响的是一段区间,区间内的相对海拔是不变的因此温度也不会变.只有区间的边界可能受到影响.因此我们只要处理边界就行了:这便是差分的思想. 比如有\([l,r]\)区间需要处理,那么我们把\(l\)位置的原答案减去,把\(l\)位置的海拔改变,并加上新答案.再对\(