• [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
  • 相关阅读:
    第八周学习进度总结
    全国(球)疫情信息可视化
    第六周学习进度总结
    手把手教你爬取B站弹幕!
    Xpath基础学习
    团队成员及选题介绍
    第五周学习进度
    课堂练习之疫情APP
    SpringMVC02
    06 | 链表(上):如何实现LRU缓存淘汰算法?
  • 原文地址:https://www.cnblogs.com/si-rui-yang/p/10159320.html
Copyright © 2020-2023  润新知