Installing Apps Kattis - installingapps (贪心 + 背包)
Installing Apps Kattis - installingapps
Sandra recently bought her first smart phone. One of her friends suggested a long list of applications (more commonly known as “apps”) that she should install on the phone. Sandra immediately started installing the apps from the list, but after installing a few, the phone did not have enough disk space to install any more apps. Sometimes, the app installation failed because there was not even enough space to download the installation package. Other apps could be downloaded just fine, but had insufficient space to store the installed app.
Each app that Sandra installs has a download size dd and a storage size ss. To download the app, Sandra’s phone must have at least dd megabytes of free disk space. After the app has been installed, it then uses ss megabytes of disk space on the phone. The download size may be smaller than the storage size (e.g., if the app data is heavily compressed) or larger than the storage size (e.g., if the download contains material that might not get used such as translations to different languages). The installer is very efficient and can transform the downloaded package to an installed app without using any extra disk space. Thus, to install an app, the phone must have at least max(d,s)max(d,s) megabytes of free disk space.
Sandra quickly realised that she may have run out of space just because she installed apps in the wrong order. Thus, she decided to give the installation another try. She uninstalled all apps, and will now choose an installation order that lets her install the largest number of apps from the list. Sandra may not install any app more than once.
Help her determine what apps on the list she should install, and in what order.
Input
The input consists of:
One line with two integers nn, cc (1≤n≤500,1≤c≤100001≤n≤500,1≤c≤10000), the number of available apps and the available disk space of the phone in megabytes.
nn lines, each with two integers d,sd,s (1≤d,s≤100001≤d,s≤10000), the download size and storage size of an app, in megabytes.
Output
Output one line with the maximum number of apps that can be installed. Then output one line listing the numbers of those apps, in the order that Sandra should install them. In the case that no apps can be installed, this line can be omitted.
The apps are numbered from 11 to nn, in the order they are given in the input. If there are multiple optimal solutions, output any one of them.
| Sample Input 1 | Sample Output 1 |
|---|---|
2 100 |
2 |
| Sample Input 2 | Sample Output 2 |
|---|---|
2 100 |
0 |
题意:一个内存为V 的手机可以安装一些app,每一个app有两个不同的数值,表示已开始下载的大小和安装完以后的大小(必须下载的和安装后的大小都比手机的剩余容量要小才可以放进去),问最多可以放进去几个app,和放进去背包的一些顺序
题解:这是一个背包问题,但是普通的背包拿去是没有顺序关系的,这道题拿去的顺序关系是有关系的,前面的一个的拿去是有可能会影响后面一个app的,所以要先贪心一下。具体的贪心操作是按照d-s的大小来排序,就是下载的和安装后的相减的值的从大到小排序。为什么要这样来贪心我的理解是容量的改变多的话如果放在后面,他由于改变的多了会更加容易影响。同时这道题在uva上好像不能ac,可能是uva的数据源出问题了
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<stack>
#include<cstdlib>
#include <vector>
#include<queue>
using namespace std; typedef long long ll;
const int MAXN=1e4+5;
const double EPS=1e-8;
const int INF=0x3f3f3f3f;
const int MOD = 1e9+7;
struct Node{
int d,s,id;
}a[MAXN];
int f[505][MAXN],n,V;
bool cmp(const Node a, const Node b){
return (a.d - a.s) > (b.d - b.s);
//return a.s < b.s;
}
int main(){ ios::sync_with_stdio(false);
while(cin >> n >> V)
{
for(int i=1;i<=n;i++)
{
cin >> a[i].d >> a[i].s;
a[i].id = i;
}
sort(a+1,a+n+1,cmp);
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)
{
for(int j=V;j>=0;j--)
{
f[i][j] = f[i-1][j];
if(V-(j-a[i].s) < a[i].d)
continue;
if(j < a[i].s)
continue;
f[i][j] = max(f[i-1][j], f[i-1][j-a[i].s]+1);
}
}
int Max = 0, v = 0;
for(int i=0;i<=V;i++)
{
if(f[n][i] > Max)
{
Max = f[n][i];
v = i;
}
}
cout << f[n][v] << "\n";
if(f[n][v] == 0) continue;
int q[MAXN],cnt = 0;
for(int i=n;i>=1&&v>0;i--)
{
if(f[i][v] == f[i-1][v-a[i].s]+1)
{
q[++cnt] = a[i].id;
v -= a[i].s;
}
}
for(int i=cnt;i>=1;i--)
{
cout << q[i] << " \n"[i==1] ;
}
}
return 0;
}
Installing Apps Kattis - installingapps (贪心 + 背包)的更多相关文章
- 【bzoj4922】[Lydsy六月月赛]Karp-de-Chant Number 贪心+背包dp
题目描述 给出 $n$ 个括号序列,从中选出任意个并将它们按照任意顺序连接起来,求以这种方式得到匹配括号序列的最大长度. 输入 第一行包含一个正整数n(1<=n<=300),表示括号序列的 ...
- HDU3466Proud Merchants(贪心&背包)
http://acm.hdu.edu.cn/showproblem.php?pid=3466 题目大意是说n个物品每个物品的花费是p,但是如果你现在的钱少于q就买不了这个物品,每个物品的价值是v,求有 ...
- HDU 5303 Delicious Apples(贪心 + 背包 2015多校啊)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5303 Problem Description There are n apple trees plan ...
- bzoj4922 [Lydsy1706月赛]Karp-de-Chant Number 贪心+背包
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4922 题解 记录每一个串的没有匹配的右括号 \()\) 的数量为 \(a_i\),为匹配的左括 ...
- AT4120-[ARC096D]Sweet Alchemy【贪心,背包】
正题 题目链接:https://www.luogu.com.cn/problem/AT4120 题目大意 给出\(n\)个物品和一个容量\(m\),第\(i\)个物品体积为\(c_i\).除了第一个物 ...
- HDU 4003 [树][贪心][背包]
/* 大连热身A题 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一棵树,每条边上有权值.给一个起点,放置n个机器人,要求使得任意一个节点至少被一个机器人经过. 每个机器人经过某条边时的代价为这条 ...
- POJ2392Space Elevator(贪心+背包)
Space Elevator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9970 Accepted: 4738 De ...
- 【贪心+背包】【HDU2546】【饭卡】
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- sdut2408 pick apples (贪心+背包)山东省第三届ACM省赛
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/svitter/article/details/24642587 本文出自:http://blog.c ...
随机推荐
- koa2 从入门到进阶之路 (四)
之前的文章我们介绍了一下 koa 中间件 以及 koa 中间件的洋葱图执行流程,本篇文章我们来看一下 koa 中使用 ejs 模板及页面渲染. 在 Express 中,我们经常会用 ejs 模板来渲染 ...
- 使用Fsharp 探索 Dotnet 平台
Fsharp的交互开发环境使得我们在了解DotNet平台时能够快速的获得需要的反馈. 反馈在任何技艺的磨练过程中必不可少,我认为也是最重要的环节之一.在“一万小时天才理论”中,著名的髓鞘质就是在快速有 ...
- sass相关随笔
安装 下载ruby并且安装 点击这里 打开命令行输入 gem install sass 我使用的是sublime text3 还需要下载三个插件 sass -- 可以帮助你语法高亮 sass buil ...
- Oracle Business Intelligence Enterprise Edition 12.2.1.2.0 Books
Oracle Business Intelligence Enterprise Edition 12.2.1.2.0 Books Documentation for Oracle Business I ...
- Eucalyptus管理页面密码设置
桉树环境什么的都已经是配置好了的,但是过了一段时间不用,也不知道密码是什么了,看着下面的页面也不知道如何进去,这里我们通过命令行的方式重置用户名和密码信息. 登陆clc所在机器,输入下命令: euar ...
- silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
asp.net开发中,数据绑定是一个很简单的概念,控件与数据绑定后,控件可以自动把数据按一定的形式显示出来.(当然控件上的值改变后,可以通过提交页面表单,同时后台服务端代码接收新值更新数据) silv ...
- Mono for Android 设计器错误:Disconnected from layout renderer
今早打开vs2012 android 项目的时候出现如下错误提示: 查了半天,终于在官方网站得到答案.(http://forums.xamarin.com/discussion/143 ...
- Linux最常用命令实战
1.改变机器的名称: vim /etc/hostname Master 在文件中修改机器名称为我们想要的名称(相当于域名) 可以通过shutdown -h now 关闭 2.查看当前机器IP: ifc ...
- 如何查看CRM WebUI,C4C和Hybris里的页面技术信息
CRM 在WebClient UI页面上按F2,就能看到页面的技术信息, 可以找到当前页面是哪一个BSP component实现的: C4C 在浏览器url里添加debugMode=true,然后按住 ...
- java的图形界面初学惯用
1.单一界面的创建 public void mainFrame() { HashMap<String, Component> views = new HashMap<String, ...