HPU第四次积分赛-L:A Winged Steed(完全背包)
A Winged Steed
描述
有n种千里马,每一种都有若干匹,第i种马的颜值ai,价格di.现有m个牧马人要去挑选千里马,每一位牧马人对马的颜值都有要求:{所选马的颜值总和} ⩾Ai.现在让你来为牧马人做满足要求的最低预算.
输入
单组测试数据,第一行两个整数n,m,(1≤n,m≤1e4).
接下来nn行,每行两个整数a1,d1,a2,d2,...an,dn.
最后一行mm个整数A1,A2,...Am,(1≤ai,di,Ai≤1e4).
输出
输出m个整数占一行,用空格隔开,表示每一位牧马人的最低花费.
输入样例 1
2 2
1 2
2 1
5 5
输出样例 1
3 3
思路
完全背包,马的数量是无限的,把马看做是一个物品,把马的颜值看做物品的尺寸,牧马人对马的总颜值的要求看做是背包的体积,这样就转化成了一个完全背包问题。还有一点不同的是,要求满足>=总颜值要求的最小钱数。
比赛的时候卡到这里了,一直想不出来怎么处理相差的那部分,比赛后一看别人的代码,发现好简单,好神奇。就用了一个if就解决了问题。具体的解释放到代码里了
AC代码
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <limits.h>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <set>
#include <string>
#define ll long long
#define ms(a) memset(a,INF,sizeof(a))
#define pi acos(-1.0)
#define INF 0x3f3f3f3f
const double E=exp(1);
const int maxn=1e4+10;
using namespace std;
int dp[maxn];
// 颜值相当于物品的尺寸,每个人所需要的最小颜值是背包的体积
int beauty[maxn],money[maxn];
int p[maxn];
int main(int argc, char const *argv[])
{
ios::sync_with_stdio(false);
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>beauty[i]>>money[i];
int res=0;
for(int i=1;i<=m;i++)
{
cin>>p[i];
res=max(res,p[i]);
}
// 初始化处理dp
ms(dp);
dp[0]=0;
for(int i=1;i<=n;i++)
{
// j表示当前所需要的颜值
for(int j=1;j<=res;j++)
{
// 如果这个人对颜值的需求小于这匹马的需求,所花费的钱数变成dp[j]和money[i]中的较小者
// !!!这个if是关键
if(j<beauty[i])
dp[j]=min(dp[j],money[i]);
// 下面这里就是个完全背包了
else
dp[j]=min(dp[j],dp[j-beauty[i]]+money[i]);
}
}
// 按顺序输出所需的最小花费
for(int i=1;i<=m;i++)
{
if(i!=1)
cout<<" ";
cout<<dp[p[i]];
}
cout<<endl;
return 0;
}
HPU第四次积分赛-L:A Winged Steed(完全背包)的更多相关文章
- HPU第四次积分赛-K :方框(水题,打印图形)
方框 描述 用'*'打印出一个nxn的字符图形(1<=n<=100). 输入 多组输入.每行输入一个n,输入EOF结束文件. 输出 输出一个满足题意的图形. 输入样例 1 1 2 5 6 ...
- 应对Memcached缓存失效,导致高并发查询DB的四种思路(l转)
当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升. 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询. 解决 ...
- ACM第四次积分赛
虽然因为第一题给的数据有问题,没能四道题都做出来,但是这次第四名,进步很大,继续努力! SAU-ACM总比赛成绩 姓名 账号 上学期成绩 第一次成绩 第二次成绩 第三次成绩 第四 ...
- HPU第三次积分赛-D:Longest Increasing Subsequence(DP)
Longest Increasing Subsequence 描述 给出一组长度为n的序列,a1,a2,a3,a4...an, 求出这个序列长度为k的严格递增子序列的个数 输入 第一行输入T ...
- HPU 第三次积分赛:阶乘之和(水题)
阶乘之和 描述 对于整数pp,给出以下定义 p=x_{1}!+x_{2}!+x_{3}!+...+x_{q}!(x_{i}<x_{j}for\ all\ i<j )p=x1!+x2!+ ...
- BZOJ 1212 [HNOI2004]L语言 【AC自动机 + 背包】
题目链接[http://www.lydsy.com/JudgeOnline/problem.php?id=1212] 题意:给你一些单词,然后给出一个没有标点的文本串S,都是小写字符.现在让你求用给出 ...
- bzoj1004 [HNOI2008]Cards 置换群+背包
[bzoj1004][HNOI2008]Cards 2014年5月26日5,3502 Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿 ...
- 能让你聪明的工作DEAL四法则,来自《每周工作四小时》书籍
来自书籍<每周工作四小时>,作者蒂莫西·费里斯(Tim Ferriss,昵称:蒂姆) 能让你聪明的工作DEAL四法则: 第一步:D——定位(Definition) 第二步:E——精简( ...
- Python新式类 单例模式与作用域(四)
1 新式类与旧式类 新式类拥有经典类的全部特性之外,还有一些新的特性,比如 __init__发生变化,新增了静态方法__new__,python3目前都采用新式类,新式类是广度优先,旧式类是深度优先 ...
随机推荐
- py QScrollArea
# -*- coding: utf-8 -*-import jsonimport loggingimport sysimport requestsfrom PyQt5 import QtWidgets ...
- php微信公众号开发
简单的事例总结: wamp下载安装:https://sourceforge.net/projects/wampserver/ www目录里创建php文件weixin.php <?php head ...
- Win7系统的虚拟机中安装win7系统
今天因兼职需要,在家里的win7电脑上安装WIN7虚拟机. 之前在xp和win10系统的虚拟机中,安装各种版本的windows系统都很轻松,这一次居然折腾了很久都没搞定. 下载了好几个系统ios镜像都 ...
- vector list map set等容器某些函数的使用区别
map, set, vector erase的正确使用方法 一.erase 的用法区别 STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque); 另一类是以不 ...
- Java Web(十一) 文件上传与下载
文件上传 上传的准备工作 表单method必须为post 提供file组件 设置form标签的enctype属性为multipart/form-data,如果没有设置enctype属性,浏览器是无法将 ...
- python运算符号
运算符 比较运算 赋值运算 逻辑运算 成员运算
- Linux command automake
Linux command automake [Purpose] Learning linux command automake for generate Makefile.in for ...
- am335x system upgrade uboot sd boot(一)
由于上层应用的需求,需要运行arm docker,在kernel3.2上面还不支持,且编译器的glibc版本比较低的问题,故需要做系统升级 新的内核4.14.40驱动开发和以往有很大的不同,关键在于d ...
- unity中让物体移动到鼠标点击地面任一点的位置(单击移动和双击暂停移动)并生成图标
using UnityEngine; using System.Collections.Generic; using UnityEngine.EventSystems; using UnityEngi ...
- 基于WMI的信息查询和编辑,按微软的说明一般都是
晕!这个不是很简单的东西吗? //---------WMI---------- type Rec_Wmi = record ComputerName: string; Namespace: strin ...