codevs 1025 选菜——01背包

news/2024/7/7 13:19:28

 时间限制: 1 s

 空间限制: 128000 KB

 题目等级 : 黄金 Gold

题解
 查看运行结果
 
 
题目描述  Description

       在小松宿舍楼下的不远处,有PK大学最不错的一个食堂——The Farmer’s Canteen(NM食堂)。由于该食堂的菜都很不错,价格也公道,所以很多人都喜欢来这边吃饭。The Farmer’s Canteen的点菜方式如同在超市自选商品一样,人们从一个指定的路口进去,再从一个指定的路口出来并付款。由于来这里就餐的人数比较多,所以人们自觉地在进入口的时候就排成一个长队,沿着长长的摆放着各式各样佳肴的桌子进行选菜。

       小松发现,这种选菜方式意味着,他不能在选菜的时候离开队伍去拿一些他已经看过了的菜或者没有看过的菜,因为插队是不礼貌的,也是被BS的。

       每个菜有一个价值,而小松也自己给每个菜定了一个在他看来的美味价值,例如红烧小黄鱼在小松看来是美味价值很高的,而花菜在小松眼里则是美味价值极低的菜肴。而有一些菜是营养价值极其高的菜(例如米饭),所以无论它的美味价值是多少,小松都会选择1份。现在小松带了X元钱来食堂就餐,他想知道,在不欠帐的情况下,他选菜的美味价值总合最大是多少。

输入描述  Input Description

       请从输入文件farmer.in中读入相关数据。输入的第一行包括两个个整数n(1≤n100),k(0k实际菜的种类)和一个实数X(0≤X100),表示有n个菜式,有k种菜是必选的,小松带来了X元钱(精确到“角”)。接下来的1行包含n个实数,表示菜桌上从入口到出口的所有菜的价格(0价格10,单位“元”,精确到“角”);再接下来的1行包含n个整数,表示菜桌上从入口到出口的所有菜的美味价值(0美味价值100);再接下来一行包含n个整数,表示菜桌上从入口到出口的所有菜的种类编号(1种类编号100)。最后一行包含k个整数分别表示必选菜的种类编号。要注意的是,同一种编号的菜可以出现多次,但是他们的价格和美味价值都是一样的。对于同一种菜(无论是不是必选菜),小松最多只会选择1份(买两份红烧豆腐多没意思啊)。另外,必选菜的价格之和一定不超过X

输出描述  Output Description

       请将结果输出到输出文件farmer.out中。输出包含一个整数,表示小松能选到的菜的美味价值总和最大是多少。

       注:你可以假设数据中不会出现小松带的钱不够买必买菜的情况。

 

样例输入  Sample Input

7 1 5.0

4 1 3 0.9 2 0.5 0.9

7 3 5 2 5 0 2

6 3 5 2 4 1 2

2

样例输出  Sample Output

10

数据范围及提示  Data Size & Hint
 

分类标签 Tags 点此展开 

 
动态规划  背包型DP
 
代码
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,k,sum,c[101],num[101],f[1001],number,m[101],bi;
double x,a;
bool b[101];
int main()
{
    scanf("%d%d%lf",&n,&k,&x);
    memset(b,false,sizeof(b));//b数组是由来确定他是否为已处理过的必选菜。 
    int tot=(int)(x*10);//为了方便处理,在这里我们把价钱全部乘10。
    //由于价钱是精确到角的,所以这里*10不影响该题的答案      
    for(int i=1;i<=n;i++)
    {
       scanf("%lf",&a);
       c[i]=(int)(a*10);
    } 
    for(int i=1;i<=n;i++)
      scanf("%d",&m[i]);
    for(int i=1;i<=n;i++)
     {
         scanf("%d",&number);
         num[number]=i;//编号相同的菜后来的会覆盖掉前面的,这样接下来处理就简单了
     } //在这个地方我们把输入的数当成下标,存放下标的位置,就很容易寻找它对应的价值和美味.. 
    for(int i=1;i<=k;i++)
     {
         scanf("%d",&bi);
         tot-=c[num[bi]];
         sum+=m[num[bi]];
         b[bi]=true;//注意:在这个时候b[]内是bi; 
      } 
    for(int i=1;i<=n;i++)
     if(!b[i])
      for(int j=tot;j>=c[num[i]];j--)
      {
          f[j]=max(f[j],f[j-c[num[i]]]+m[num[i]]);//01背包求解 
       } 
    printf("%d",f[tot]+sum);
    return 0;
}

 

注意:唉,该注意的地方都在代码里头;

        本体是一个裸的01背包,但处理起来有点麻烦。

 

转载于:https://www.cnblogs.com/z360/p/6735709.html


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

相关文章

kali mysql安装教程_MySQL 安装教程(windows版)

MySQL版本&#xff1a;8.0.18window环境&#xff1a;win101.首先我们需要下载ZIP解压配置安装包&#xff0c;如果有需要的可以到下面网址下载。2.将安装包下载至F盘中新建的my_sql文件夹中并解压3.配置环境变量&#xff0c;右键我的电脑&#xff0c;选择 属性---高级系统设置--…

maven的使用

作为一个技术菜&#xff0c;这篇文章主要介绍maven的基本使用。maven的安装&#xff0c;maven的用途&#xff0c;这里就不做介绍了&#xff0c;可以百度。一、cmd命令行下创建一个简单的maven项目&#xff1a;1.mvn archetype:generate&#xff08;第一次使用maven需要联网&…

(八)统一配置中心-Config

对于配置的重要性&#xff0c;我想我不用进行任何强调&#xff0c;大家都可以明白其重要性。在普通单体应用&#xff0c;我们常使用配置文件(application(*).properties(yml))管理应用的所有配置。这些配置文件在单体应用中非常胜任其角色&#xff0c;并没有让我们感觉到有头疼…

overwrite java_java中的重写override或overwrite

java中的重写override或overwriteTestOverWrite.java?class"java">class Person {private String name;private int age;public void setName(String name){this.namename;}public void setAge(int age) {this.ageage;}public String getName(){return name;}pub…

js执行完一件事 之后再去执行下一件事_没有执行力,一切都是零

什么是执行力&#xff1f;对于执行力最直观的说法&#xff0c;就是“今日事今日毕”。如果你今天的任务是写完一篇文章&#xff0c;在没有任何外界障碍的情况下&#xff0c;你拖拖拉拉地把它放在明天去做&#xff0c;你说你是一个很有能力的人&#xff0c;对不起&#xff0c;没…

Office word中去掉首页的页眉

1.首先将光标位置移动到第二页的开始&#xff0c;然后点击页面布局命令。 2.页面布局里面找到分隔符&#xff0c;找到下一页的分隔符。&#xff08;分页符分页&#xff09; 3.双击第二页的页眉&#xff0c;打开页眉编辑菜单。将连接到前一条页眉的命令去掉。 4.回到第一页的页眉…

作为2019年的Java程序员,如何能快速进阶成长?

面试候选人的时候&#xff0c;有个比较常见的问题&#xff1a;对于一份工作&#xff0c;你最关注哪些因素&#xff1f;回答往往是薪资待遇&#xff0c;公司氛围&#xff0c;公司发展前景&#xff0c;工作强度等。个人比较欣赏的答案是&#xff1a;个人能力的成长。想收获一个薪…

.net 启动mysql数据库_MySQL 数据库的启动与关闭

2、MySQL安全启动(mysqld_safe)mysqld_safe是一个shell 脚本&#xff0c;会调用mysqld启动mysql服务器&#xff0c;并监听服务器。如果mysqld进程异常终止&#xff0c;mysqld_safe将自动重启mysqldmysql_safe 从配置文件中读取[mysqld],[server],[mysqld_safe]等选项&#xff0…