[JOI 2014 Final]IOI 馒头

Posted si-rui-yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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;
}
View Code

 

以上是关于[JOI 2014 Final]IOI 馒头的主要内容,如果未能解决你的问题,请参考以下文章

JOI 2020 Final 火灾

年轮蛋糕JOI2014Final

2018.10.1「JOI 2014 Final」年轮蛋糕

The 22nd Japanese Olympiad in Informatics (JOI 2022/2023) Final Round 题解

loj 2759「JOI 2014 Final」飞天鼠

bzoj4240