BZOJ 3703: 昊昊的壮举之造福社会
搜索,剪枝
首先可以二分答案迭代加深,假设要买 $p$ 台
那么肯定卖价格最小的 $p$ 台
再来个 $A*$ ,设搜到当前情况时,有 $waste$ 的钱一定要被浪费(其实就是某些学校剩下的钱连最便宜的都买不起)
设最便宜的 $p$ 台电脑总价值为 $sum$ ,所有学校的总钱数为 $S$,那么我们最多浪费 $S-tot$,如果 $waste>S-tot$ 就直接返回
但是显然还是不够
看看数据发现相同价格的电脑和相同初始钱数的学校数量很多
不妨使搜索时保证,对于相同价格的电脑,购买的学校的初始钱数单调不增,显然这样不会影响搜索时的正确性
然后就可以跑过了
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=5e5+;
int n,m,mon[N],cst[N],ans;
int S,sum[N],Mx,Las[N];
bool GG;
void dfs(int pos,int waste)
{
if(waste>Mx) return;
if(!pos) { GG=; return; }
int R=Las[cst[pos]];
for(int i=R;i;i--)
{
if(cst[pos]>mon[i]) continue;
mon[i]-=cst[pos]; Las[cst[pos]]=i;
dfs(pos-,waste+ (mon[i]<cst[])*mon[i] );
mon[i]+=cst[pos];
if(GG) return;//记得先还原mon再返回
}
Las[cst[pos]]=R;
}
bool check(int p)
{
if(sum[p]>S||cst[p]>mon[m]) return ;
GG=; Mx=S-sum[p];
for(int i=;i<=n;i++) Las[cst[i]]=m;//每次都要初始化Las
dfs(p,); return GG;
}
int main()
{
m=read();
for(int i=;i<=m;i++) mon[i]=read(),S+=mon[i];
n=read();
for(int i=;i<=n;i++) cst[i]=read();
sort(mon+,mon+m+); sort(cst+,cst+n+);
for(int i=;i<=n;i++) sum[i]=sum[i-]+cst[i];
int L=,R=n;
while(L<=R)
{
int mid=L+R>>;
if(check(mid)) L=mid+,ans=mid;
else R=mid-;
}
printf("%d\n",ans);
return ;
}
BZOJ 3703: 昊昊的壮举之造福社会的更多相关文章
- bzoj 3704 昊昊的机油之GRST 贪心dp,思维
昊昊的机油之GRST Time Limit: 10 Sec Memory Limit: 1024 MBSubmit: 80 Solved: 33[Submit][Status][Discuss] ...
- UESTC 1256 昊昊爱运动 Map
昊昊爱运动 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜欢运动 他N天 ...
- CDOJ 1259 昊昊爱运动 II 线段树+bitset
昊昊爱运动 II 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r ...
- cdoj 1256 昊昊爱运动 预处理/前缀和
昊昊爱运动 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1256 Descr ...
- CDOJ 1259 昊昊爱运动 II bitset+线段树
题目链接 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r天参加了 ...
- cdojQ - 昊昊爱运动 II
地址:http://acm.uestc.edu.cn/#/contest/show/95 题目: Q - 昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) ...
- UESTC-1259 昊昊爱运动 II
昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜 ...
- cdoj 1256 昊昊爱运动 预处理
昊昊爱运动 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜欢运动 他NN ...
- bzoj 3704 昊昊的机油之GRST - 贪心
题目传送门 传送门 题目大意 给定一个数组$a$和数组$b$,每次操作可以选择$a$的一个子区间将其中的数在模4意义下加1,问把$a$变成$b$的最少操作次数. 首先求$b - a$,再差分,令这个数 ...
随机推荐
- CentOS6.5系统解决中文乱码问题
一. 问题详情 Windows的默认编码为GBK,Linux的默认编码为UTF-8.在Windows下编辑的中文,在Linux下显示为乱码.为了解决此问题,修改Linux的默认编码为GBK. ...
- 03.LinuxCentOS系统root目录LVM磁盘扩容
根目录LVM扩容操作步骤: [root@centos7 ~]# df -lh文件系统 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root 50G 7.7G 43G 6% / ...
- 关于webpack高版本向低版本切换 如何切换?
卸载:npm uninstall webpack -g 重新安装:npm install webpack@3.7.1 -g 直接安装指定版本就行了,如安装 2.4.1 版:cnpm install w ...
- keepalived的配置文件
! Configuration File for keepalived global_defs { notification_email { # acassen@firewall.loc # fail ...
- JS合并两个函数
/** * 合并两个函数 * @param functionA 先执行 * @param functionB 执行完 functionA 后返回 * @returns {*} */ function ...
- Angular Viewchild undefined
Angular的viewchild在使用的时候报错 undefined 1 检查是否在元素上打上标识 #xxx 2 查看引用元素时的时机 是否在AfterViewInit之后 3 检查元素是否在*ng ...
- 修改pom项目版本 jenkins 关联 shell命令
#获取pom文件内的项目版本 version=`awk '/<version>[^<]+<\/version>/{gsub(/<version>|<\/ ...
- 批量去除输出数据文件名前面的"\output\“
for file in \output\*; do mv "\(file" "\){file#\output\_}";done;
- Flask学习笔记02之配置文件
1. Flask默认的配置 Flask实例中包含了它的配置信息 #实例化一个Flask对象 app = Flask(__name__) # 打印默认配置信息 print(app.config) 打印结 ...
- 一个KVO 实现WKWebView加载进度条的例子 (注意最后移除观察者)
// // OpenWebViewController.m // Treasure // // Created by 蓝蓝色信子 on 16/7/29. // Copyright © 2016年 GY ...