zoukankan      html  css  js  c++  java
  • 洛谷 P1964 【mc生存】卖东西

    题目背景

    服务器好好玩

    题目描述

    lcy0x1去服务器的系统商店卖东西。

    一个人的背包有21格。

    一开始他的背包里有m件不同的物品(不能卖)。

    他要卖n种物品,每种物品有ai件,价值bi,一格可以放ci个,

    名字sti(0<sti的长度<100)

    相同的物品可以放同一格(只要没放满)。

    问他跑一次最多能卖多少钱。

    输入输出格式

    输入格式:

     

    第一行m,n(0<=m<=21,0<=n<=100);

    下面n行 ai,bi,ci,sti(0<=ai<=1344,0<=bi<=10000,0<ci<=64);

     

    输出格式:

     

    最多卖的钱s(0<=s<=1000000);

     

    输入输出样例

    输入样例#1: 复制
    20 3
    63 1 64 yinshifen
    1 10 1 men
    1 1 64 yinshifen
    输出样例#1: 复制
    64

    说明

    多重背包

    搜索0分!!!

    强大的数据

    思路:预处理+01背包。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<map>//用STL的map的头文件
    using namespace std;
    int dp[30],w[150000];
    map<string,int>a,b,c;
    map<string,bool>d;
    string s[105];
    int main(){
        int n,m,l,i,j,k,maxi=0;
        cin>>m>>n;
        m=21-m;
        for(i=1;i<=n;i++){
            cin>>l>>j>>k;
            cin>>s[i];
            a[s[i]]+=l;
            b[s[i]]=j;
            c[s[i]]=k;
        }
        k=0;
        for(i=1;i<=n;i++){
            if(d[s[i]]==0){
                d[s[i]]=1;
                while(a[s[i]]>=c[s[i]]){
                    w[++k]=c[s[i]]*b[s[i]];
                    a[s[i]]-=c[s[i]];
                }
                if(a[s[i]]) w[++k]=a[s[i]]*b[s[i]];
            }
        }
        for(i=1;i<=k;i++){
            for(j=m;j>=1;j--){
                dp[j]=max(dp[j],dp[j-1]+w[i]);
                maxi=max(maxi,dp[j]);
            }
        }
        cout<<maxi<<endl;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    .NET之权限管理
    .NET之带星期的日期显示
    ASP.net MVC 同一view或页面使用多个Model或数据集的方法
    ISBN号校检程序(C#与SQL版)
    ASP操作类似多维Cookies
    C# webBrowser自动登陆windows集成验证方法
    JOI 系列乱做
    NOI2021 部分题解
    「NEERC 2015」Jump 题解
    CF/AT 乱做
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/8001102.html
Copyright © 2011-2022 走看看