rqnoj PID95:多多看DVD(加强版)
题目描述
多多进幼儿园了,今天报名了。只有今晚可以好好放松一下了(以后上了学后会很忙)。她的叔叔决定给他买一些动画片DVD晚上看。可是爷爷规定他们只能在一定的时间段L看完。(因为叔叔还要搞NOIP不能太早陪多多看碟,而多多每天很早就困了所以只能在一定的时间段里看碟)。多多列出一张表要叔叔给她买N张DVD碟,大多都是多多爱看的动画片(福音战士,机器猫,火影忍者,樱桃小丸子……)。这N张碟编号为(,,……N)。多多给每张碟都打了分Mi(Mi>),打分越高的碟说明多多越爱看。每张碟有播放的时间Ti。多多想在今晚爷爷规定的时间里看的碟总分最高。(必须把要看的碟看完,也就是说一张碟不能只看一半)。显然叔叔在买碟是没必要把N张全买了,只要买要看的就OK了,这样节省资金啊。而且多多让叔叔惯的特别任性只要他看到有几张就一定会看完。
可是出现了一个奇怪的问题,买碟的地方只买给顾客M(M<N)张碟,不会多也不会少。这可让多多叔叔为难了。怎么可以在N张碟中只买M张而且在规定时间看完,而且使总价值最高呢?
聪明的你帮帮多多的叔叔吧。
数据范围 by RQ
对于100%的数据m<n<= l<=
输入格式
输入文件有三行
第一行:两个数空格隔开的正整数,N,M,L(分别表示叔叔给多多买的碟的数量,商店要买给叔叔的碟的数量,爷爷规定的看碟的时间段)。
第二行到第N行,每行两个数:T,M,给出多多列表中DVD碟的信息。
输出格式
单独输出一行,表示多多今晚看的碟的总分。
如果商店卖给叔叔的M张碟无法在爷爷规定的时间看完输出0;
样例输入 样例输出
3
题目
真·题目
if 你是一个小纯洁,请看上面的那个题目。
else 多多是个很污的小萝莉,她搞NOIP的叔叔也好不到哪去,这位叔叔热衷于给侄女买DVD,然后不知道从哪冒出来的爷爷就看不下去了,规定多多每天只能看L时间。多多让叔叔买n张DVD,每张DVD都有时长Ti和分数(多多的喜爱程度)Mi,好心的商人为了多多的身体着想,只卖给叔叔m张。请你满足多多的欲望,让她看碟的分数最高。输入文件有三行,第一行:两个数空格隔开的正整数,N,M,L(分别表示叔叔给多多买的碟的数量,商店要买给叔叔的碟的数量,爷爷规定的看碟的时间段)。第二行到第N行,每行两个数:T,M,给出多多列表中DVD碟的信息。单独输出一行,表示多多今晚看的碟的总分。如果多多一张也看不了欲求不满输出0;
芒果君:先贴代码~
#include<cstdio>
#include<algorithm>
#include<iostream>
#define inf -20000000
using namespace std;
int n,m,l,t[],s[],f[][],i,j,k;
int main()
{
cin>>n>>m>>l;
for(i=;i<=n;++i) cin>>t[i]>>s[i];
for(i=;i<=n;++i)
for(j=;j<=m;++j)
f[i][j]=inf;
for(i=;i<=n;++i)
for(j=m;j>=;--j)
for(k=l;k>=t[i];--k)
if(f[j-][k-t[i]]||j==) f[j][k]=max(f[j][k],f[j-][k-t[i]]+s[i]);
if(f[m][l]==inf) cout<<""<<endl;
else cout<<f[m][l]<<endl;
return ;
}
对于刚学01背包的各位dalao来说,如果听完下节完全背包的课,很快就会对循环的顺序产生疑惑。为什么01背包是逆序?那么我们一定要从动态规划的原理出发——每个dp最后的结果都是由无数个子结果“继承”而来,如果写成正序循环,那么就很可能出现当前物品重复放的情况。同时要关注f数组的意义,有时它和最后的大结果是同步的,即“在一定空间内能获得的最大价值”。在本题当中,由于选取物品的数量有限,就要多加一维来处理,用f[j][k]表示放j个物品,在k空间内获得的最大价值。为了控制只放一个物品,我们把多出的那层循环设置成逆序,并写了一个判断“存在继承可能”的if语句,这道题就算结束了。
rqnoj PID95:多多看DVD(加强版)的更多相关文章
- RQNOJ 95 多多看DVD(加强版):01背包
题目链接:https://www.rqnoj.cn/problem/95 题意: 叔叔要陪多多看动画片. 有n张DVD可以买,第i张碟的打分为w[i],播放时间为t[i]. 爷爷规定他们只能在一定的时 ...
- 加强版DVD管理系统
这个加强版,只做了新增和查看. 主要是在新增代码那里增加了一些处理: 进入新增操作,一直可以不跳出来,每次新增成功后,问你是否继续,输入y就继续,输入n就不继续 代码如下: import java.u ...
- 【BZOJ-3514】Codechef MARCH14 GERALD07加强版 LinkCutTree + 主席树
3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1288 Solved: 490 ...
- 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
- dvd开发小程序
package dvdManager8; import java.util.Scanner; public class DvdSystem8 { static String[][] dvd = new ...
- dvd管理系统
>>>>>>>>>>>>>>>>>>>> 语言:java 工具:eclipse ...
- RQNOJ 490 环形石子合并
题目链接:https://www.rqnoj.cn/problem/490 题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一 ...
- JAVA基础代码分享--DVD管理
问题描述 为某音像店开发一个迷你DVD管理器,最多可存6张DVD,实现碟片的管理. 管理器具备的功能主要有: 1.查看DVD信息. 菜单选择查看功能,展示DVD的信息. 2.新增DVD信息 选择新增功 ...
- vijos P1915 解方程 加强版
背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已 ...
随机推荐
- 13、生命周期-InitializingBean和DisposableBean
13.生命周期-InitializingBean和DisposableBean InitializingBean接口 package org.springframework.beans.factory ...
- 002_C/C++笔试题_简单算法程序
(一)冒泡排序法 #include <iostream> using namespace std; void bubblesort(int a[], int m); int main(vo ...
- pyecharts v1 版本 学习笔记 折线图,面积图
折线图 折线图 基本demo import pyecharts.options as opts from pyecharts.charts import Line c = ( Line() .add_ ...
- setsockopt函数
#include <sys/socket.h> int setsockopt( int socket, int level, int option_name, ...
- GitHub 更新fork的代码
转载地址:http://blog.csdn.net/do_it__/article/details/7836513 一.前提 本文的前提是你已经在github上fork了别人的分支,并且弄好了跟git ...
- 51Nod 1701 最后的机会
1701 最后的机会 给定一字符串S,S非空,由小写字母组成,设v为S中元音字母的个数,c为辅音字母的个数."a", "e", "i", & ...
- c 判断字符是否为字母 (iswalpha example)
#include <stdio.h> #include <wctype.h> int main () { ; wchar_t str[] = L"C++"; ...
- instr和like的使用区别
1.instr函数 instr函数是一个字符串处理函数,它在Oracle/PLSQL中是返回子字符串在源字符串中的位置,如果在源串中没有找到子串,则返回0. instr函数定义如下: /* * 返回子 ...
- golang入门time与string转换, time加减时间, 两个时间差
package main import ( "fmt" "time") var timeLayoutStr = "2006-01-02 15:04:0 ...
- Oracle常用操作表结构的语句
首先,一起来认识几个单词. alter (改变) rename(重命名) column(柱子,用来表示列) modify(修改) comment on (评论) truncate (删减,截断) 1. ...