Northwestern European Regional Contest 2017-I题- Installing Apps题解
一、题意
有一个手机,容量为$C$,网上有$N$个app,每个app有个安装包大小$d_i$,有个安装后的占用空间大小$s_i$,安装app是瞬间完成的,即app的占用空间可以瞬间由$d_i$变成$s_i$,而不需要其他多余的空间。问这个手机最多可以安装多少个app,输出最多可以安装的app数量和安装顺序。
二、思路
很显然的$dp$。按照$max(d,s)-s$从大到小排序。$dp[i][j]$表示在前$i$个app中,占用空间不超过$j$的条件下最多可以安装的app的数量。那么,有如下递推式:
枚举$1 \le i \le N,0 \le j \le C$,如果$j<s_i$,$dp[i][j]=dp[i-1][j]$;
如果$j \ge s_i且C-(j-s_i) \ge d_i$,$dp[i][j]=max(dp[i-1][j],dp[i-1][j-s_i]+1)$;
初始状态,全部的$dp$都是$0$。
然后,在状态转移的时候,需要记录选择的路径。
三、注意点
1、“如果$j \ge s_i且C-(j-s_i) \ge d_i$”,意思是,如果$j \ge s_i$且选择当前这个app之前剩余空间大于当前这个app的安装包大小,那么就可以安装这个app。
2、最后的答案不一定是$dp[N][C]$,而是$max\{dp[N][j]|0 \le j \le C\}$。
3、这题其实就是01背包模型,记录路径的方案和01背包一样。
4、切记:记录路径时,用额外数组的方式最靠谱。
四、代码
#include<bits/stdc++.h>
using namespace std;
struct app {
int d, s, id;
} p[];
bool cmp(app a1, app a2) {
return max(a1.d, a1.s) - a1.s > max(a2.d, a2.s) - a2.s;
}
][], ans[], acnt;
][];
int main() {
scanf("%d%d", &N, &C);
; i <= N; ++i)scanf("%d%d", &p[i].d, &p[i].s), p[i].id = i;
; i <= N; ++i) {
; j <= C; ++j)dp[i][j] = ;
}
sort(p + , p + N + , cmp);
; i <= N; ++i) {
; j <= C; ++j) {
dp[i][j] = dp[i - ][j];
if(j >= p[i].s) {
int last = j - p[i].s;
if(C - last >= p[i].d) {
][last] + ) {
dp[i][j] = dp[i - ][last] + ;
path[i][j] = ;
}
}
}
}
}
;
; --j) {
if(aa < dp[N][j]) {
aa = dp[N][j], V = j;
}
}
; --i) {
if(path[i][j]) {
ans[++acnt] = p[i].id;
j -= p[i].s;
}
}
reverse(ans + , ans + acnt + );
printf("%d\n", acnt);
; i <= acnt; ++i)printf("%d ", ans[i]);
;
}
/*
3 4
2 1
3 2
3 3
*/
Northwestern European Regional Contest 2017-I题- Installing Apps题解的更多相关文章
- 2017-2018 Northwestern European Regional Contest (NWERC 2017)
A. Ascending Photo 贪心增广. #include<bits/stdc++.h> using namespace std; const int MAXN = 1000000 ...
- Northwestern European Regional Contest 2016 NWERC ,F题Free Weights(优先队列+Map标记+模拟)
传送门: Vjudge:https://vjudge.net/problem/Gym-101170F CF: http://codeforces.com/gym/101170 The city of ...
- 2015-2016 Northwestern European Regional Contest (NWERC 2015)
训练时间:2019-04-05 一场读错三个题,队友恨不得手刃了我这个坑B. A I J 简单,不写了. C - Cleaning Pipes (Gym - 101485C) 对于有公共点的管道建边, ...
- Northwestern European Regional Contest 2014 Gym - 101482
Gym 101482C Cent Savings 简单的dp #include<bits/stdc++.h> #define inf 0x3f3f3f3f #define inf64 0x ...
- codeforces Gym - 101485 D Debugging (2015-2016 Northwestern European Regional Contest (NWERC 2015))
题目描述: 点击打开链接 这题题意其实很不好理解,你有一个n行的程序,现在程序运行了r时间之后停止了运行,证明此处有一个bug,现在你需要在程序中加printf来调试找到bug所在的位置,你每次加一个 ...
- 2012-2013 Northwestern European Regional Contest (NWERC 2012)
B - Beer Pressure \(dp(t, p_1, p_2, p_3, p_4)\)表示总人数为\(t\),\(p_i\)对应酒吧投票人数的概率. 使用滚动数组优化掉一维空间. 总的时间复杂 ...
- 2006 ACM Northwestern European Programming Contest C题(二分求最大)
My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a numberN o ...
- ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbilisi, November 24, 2010
ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbil ...
- 2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17)
2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) A 题意:有 n 个时刻 ...
随机推荐
- vue 之 .$mount()
$mount():手动挂载 当Vue实例没有el属性时,则该实例尚没有挂载到某个dom中: 假如需要延迟挂载,可以在之后手动调用vm.$mount()方法来挂载.例如: <div id=&quo ...
- 一次delete基表回收DBA权限的危险性操作
1.0事件还原:测试库某个对象,使用具有DBA角色用户导出,生产环境普通用户无法导入数据,因此需要回收测试库dba角色,revoke无法回收 2.0操作流程 回收角色报错 测试环境测试,delete删 ...
- Android shell command execute Demo
package com.android.utils; import java.io.File; import java.io.IOException; import java.io.InputStre ...
- 【opencv基础】linux系统opencv以及opencv_contrib的安装与使用
前言 本文主要介绍如何在linux系统安装使用opencv. 具体步骤可参考opencv官网here. 步骤 编译源码之前需要安装相关依赖库: 1.下载源码: 2.解压源码: 3.配置cmake: 注 ...
- 一定要记住这20种PS技术,让你的照片美的不行! - imsoft.cnblogs
照片名称:调出照片柔和的蓝黄色-简单方法, 1.打开原图素材,按Ctrl + J把背景图层复制一层,点通道面板,选择蓝色通道,图像 > 应用图像,图层为背景,混合为正片叠底,不透明度50%,反相 ...
- unknown error: call function result missing 'value'
好好的脚本全部报错,遇到这种现在看一下自己Chrome浏览的版本号 然后去chromedriver官网上下载最新驱动文件 https://sites.google.com/a/chromium.org ...
- SUST OJ 1642: 绝地求生—死亡顺序
1642: 绝地求生-死亡顺序 时间限制: 1 Sec 内存限制: 128 MB提交: 81 解决: 53[提交][状态][讨论版] 题目描述 最近陕西科技大学六公寓的小东同学深深的入迷了一款游戏 ...
- linux学习——sed工具
命令格式: sed [-nefr] [动作] 1.sed可以分析标准输入(STDIN)的数据,然后将数据处理后,再将他输出到标准输出(STDOUT),他有替换.删除.新增.选定特定行等处理功能.sed ...
- cache、session与cookie
cache.session.cookie的区别 session把数据保存在服务器端,每一个用户都有属于自己的Session,与别人的不冲突 就是说,你登陆系统后,你的信息(如账号.密码等)就会被保存在 ...
- Hadoop操作前准备工作
摘要:本文介绍Hadoop操作前的准备工作. 关键词:Hadoop Linux JDK WinSCP 俗语说,“磨刀不误砍柴工”.Hadoop操作前的准备工作可以加快Hadoop的操作与应用. ...