洛谷题解 P1964【mc生存】卖东西

news/2024/7/1 20:39:41

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);

样例:

输入:

20 3
63 1 64 yinshifen
1 10 1 men
1 1 64 yinshifen

输出:

64

这个题比较乱感觉,但是能感受到考察的是dp背包问题,占的格数代替的就是物品的重量,但是这个题的数据好像不是很清楚,需要进行处理。

需要对物品的种类格数进行划分,格数足够一格了尽管是同一类物品也要看成两类,而如果数量加起来不到一格,就要合并成一个物品(体现最多卖的钱)。

所以我的思路就是用一个结构体对物品封装,先进行贪心处理,然后用01背包进行计算。

AC代码如下:

#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>

using namespace std;

typedef struct object
{
   int piece,price,number,value;
   string name;
}ob;


int main()
{
    int m,n;
    int num[1000] = {0};
    ob o[1000];

    cin>>m>>n;
    m = 21 - m;
    int ans[1000][m+1];

    for(int i = 1;i <= n;i++)
    {
        cin>>o[i].piece>>o[i].price>>o[i].number>>o[i].name;
        for(int j = 1; j <= i;j++)
        {
            if(i != j && o[i].name == o[j].name)
            {
                if(o[i].piece + o[j].piece <= o[i].number)
                {
                    o[j].piece += o[i].piece;
                    n--;
                    i--;
                }
                else
                {
                    o[i].piece = o[i].piece - (o[j].number - o[j].piece);
                    o[j].piece = o[j].number;
                }
            }
        }
    }
    for(int i = 1;i <= n;i++)
    {
        o[i].value = o[i].piece * o[i].price;
    }
    for(int i = 1;i <= n;i++)
    {
        for(int j = m;j >= 1;j--)
        {
            ans[i][j] = max(ans[i-1][j],ans[i-1][j - 1]+o[i].value);
        }
    }
    cout<<ans[n][m]<<endl;
    return 0;
}

http://www.niftyadmin.cn/n/3142483.html

相关文章

那些你不常用却非常有用的MySql语句和命令

操作数据库 关于数据库的操作比较少&#xff0c;主要是&#xff1a;看、建、用、删。 查看数据库 获取服务器上的数据库列表通常很有用。执行show databases;命令就可以搞定。 1mysql> show databases;创建数据库 12mysql> create database db_test;Query OK, 1 row affe…

我就死磕安卓了,怎么了?

先说说前戏吧 今天突发奇想&#xff0c;为什么要在安卓这行业呆这么久&#xff1f;做了好几年的开发&#xff0c;目前竟然连房子首付都买不起&#xff0c;说起来很惭愧&#xff01;已经远远的拖大家的后腿了。 目前为止&#xff0c;也主要以Android为主&#xff0c;小程序RN为次…

BJTU1853 gangpener 买零食

BJTU1853 gangpener 买零食 题目&#xff1a; gangpener 非常宠爱他的妹妹。 今天妹妹让 gangpener 去零食大厦买零食&#xff0c;零食大厦高 &#x1d45b; 层&#xff0c;除了第一层外&#xff0c;每层各有一种妹妹想吃的零食。零食大厦每层有 &#x1d45a; 个摊位&#…

jquery点击按钮或链接,第一次与第二次执行不同的事件

本文和大家分享一个jquery的实例&#xff0c;这个实例实现的是点击网页里的按钮或链接&#xff0c;第一次和第二次会执行不同的事件&#xff0c;也就是两个事件会轮流执行。 <script language"javascript">$(function(){var f false;$("#aijquery1"…

BJTU1844 hwf吃披萨

BJTU1844 hwf吃披萨 题目&#xff1a; hwf 是一个非常喜欢吃披萨的人。某天&#xff0c;天上掉下了一张披萨&#xff0c;被 hwf 和高老师看到了。高老师把披萨分成了 &#x1d45b; 份, 第 &#x1d456; 份的角度为 &#x1d44e;&#x1d456;。为了公平起见&#xff0c;他…

对于最长公共子序列的理解。

解决LCS问题&#xff0c;需要把原问题分解成若干个子问题&#xff0c;所以需要刻画LCS的特征。 设A“a0&#xff0c;a1&#xff0c;…&#xff0c;am”&#xff0c;B“b0&#xff0c;b1&#xff0c;…&#xff0c;bn”&#xff0c;且Z“z0&#xff0c;z1&#xff0c;…&#xf…

函数编程

1. 编码问题 i.请说明python2与python3中的默认编码是什么&#xff1f; python2 ASCII 码 python3 字符串为unicode&#xff0c;文件默认编码为utf-8 ii.为什么会出现中文乱码&#xff1f;你能列举出现乱码的情况有哪几种&#xff1f; 读取使用的编码和存储时使用的编码不一致…

苏州大学新生寒假训练day3 D - Bone Collector

苏州大学新生寒假训练day3 D - Bone Collector Problem: Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave … The bone colle…