当前位置: 首页 > news >正文

1025 选菜

1025 选菜

 

 时间限制: 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
 
背包dp例题,复习一下,so仅贴AC代码
AC代码:
#include<cstdio>
#include<iostream>
using namespace std;
#define N 1001
int f[N],b[N],s;
struct node{
    int jg;
    int mw;
    int bh;
}t[N];
int main(){
    int n,m;
    double xx,x1;
    scanf("%d%d",&n,&m);
    scanf("%lf",&xx);
    int x=xx*10;
    for(int i=1;i<=n;i++) scanf("%lf",&x1),t[i].jg=x1*10;
    for(int i=1;i<=n;i++) scanf("%d",&t[i].mw);
    for(int i=1;i<=n;i++) scanf("%d",&t[i].bh); 
    for(int i=1;i<=m;i++) scanf("%d",&b[i]); 
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
            if(t[i].bh==t[j].bh) 
                t[j].bh=0;
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)
            if(b[i]==t[i].bh){
                s+=t[i].mw;
                x-=t[i].jg;
                t[i].bh=0;
            }
    for(int i=1;i<=n;i++)
        if(t[i].bh)
            for(int j=x;j>=t[i].jg;j--)
                f[j]=max(f[j],f[j-t[i].jg]+t[i].mw);
    printf("%d",f[x]+s);
    return 0;
}

 

转载于:https://www.cnblogs.com/shenben/p/5778511.html

相关文章:

  • 极简.高性能.分布式框架,可运行于多种环境(apache/php-fpm,swoole)
  • bootstrap 使用table表单布局 隐藏显示行
  • 一键部署Openstack R版
  • redis3.2 最新版本启动配置文件redis.conf详细说明
  • Slack将新增更多功能免写程序就能自动排工作流程
  • Java 集合框架之 Map
  • 《编程珠玑》读书笔记(2,3)
  • 读书:全职高手
  • 思科模拟器-DHCP配置
  • 在Linux上限制远程登陆的IP
  • Docker 服务编排 Mesos Swarm Kubernetes 三种模式实践
  • log4j2输出到kafka
  • 清空回收站后怎么恢复文件?还是这个方法好
  • Mongodb延迟复制节点配置
  • DDR硬件设计要点详解(包括电源部分)
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • golang中接口赋值与方法集
  • java第三方包学习之lombok
  • JS+CSS实现数字滚动
  • PHP 7 修改了什么呢 -- 2
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • 第十八天-企业应用架构模式-基本模式
  • 使用agvtool更改app version/build
  • 使用common-codec进行md5加密
  • 探索 JS 中的模块化
  • 微信小程序--------语音识别(前端自己也能玩)
  • 用 Swift 编写面向协议的视图
  • 用mpvue开发微信小程序
  • 再谈express与koa的对比
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 正则表达式-基础知识Review
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​比特币大跌的 2 个原因
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #Z2294. 打印树的直径
  • (0)Nginx 功能特性
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (待修改)PyG安装步骤
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (三分钟)速览传统边缘检测算子
  • (五)c52学习之旅-静态数码管
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net wcf memory gates checking failed
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET导入Excel数据
  • .NET委托:一个关于C#的睡前故事
  • /etc/sudoer文件配置简析
  • @Import注解详解
  • @ModelAttribute使用详解