pq

题目描述

小q 的女朋友送给小q nn个整数。但是这些数太大了,小q 的女朋友拿不动,于是拜托小q把这些数减少一些。

小q 每次可以选择其中的两个x,yx,y (不能同时选择同一个数) 变成x−P,y−Qx−P,y−Q,现在他希望能知道最多能帮女朋友减掉多少P,QP,Q。

输入

第一行一个数表示nn。

第二行由空格隔开的nn个数。

第三行两个数,表示p,qp,q。

输出

一行一个数,表示能减掉的PP和QQ的总和。

样例输入

<span style="color:#333333"><span style="color:#333333">输入样例1
2
100 100
50 50
输入样例2
3
50 250 50
50 100
输入样例3
4
123 456 789 555
58 158</span></span>

样例输出

<span style="color:#333333"><span style="color:#333333">输出样例1
200
输出样例2
300
输出样例3
1728</span></span>

提示

对于前20%的数据,n≤5;

对于100%100%的数据,1≤n≤50,ci≤2000,50≤P,Q≤2000。

来源

2018年10月hnsdfz集训


solution

令状态f[i][x][y] 表示前i个数,p有x个没有匹配,q有y个没有匹配

我们枚举i被分成了几个p和几个q

设分了nx个p ny个q,

然后分类讨论

1 

 if(nx<=y&&ny<=x)
f[x-ny][y-nx]=max(f[x-ny][y-nx],g[x][y]+nx+ny);

意思是nx ny全部用于匹配原来未匹配的x,y

2

if(nx<=y&&ny>x)
f[0][y+ny-x-nx]=max(f[0][y+ny-x-nx],g[x][y]+nx+x);

意思是多出的x都被匹配完了 ny剩的加到多出的y上

3

if(nx>y&&ny<=x)
f[nx+x-y-ny][0]=max(f[nx+x-y-ny][0],g[x][y]+ny+y);

同2

4

if(nx>y&&ny>x)
f[nx-y][ny-x]=max(f[nx-y][ny-x],g[x][y]+x+y);

意思是ny nx都有剩 (恰好交换了)

还有几个问题

1. 50*2000*2000 MLE

滚动数组

2.TLE

(1) 不需要枚举p和q,只要枚举p,贪心取q(一定最优)

(2)真正有用的的dp范围只有[40][40]   [0][2000] [2000][0]

因为,加入一个数时

啊我忘了 (留坑待填)

orz神犇拒绝滚动怒卡空间

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
int n,pp,qq,s[55],f[2005][2005],flag[2005][2005];
int g[2004][2005];
struct node{
int id,x,y;
}t,ne;
queue<node>q;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)scanf("%d",&s[i]);
cin>>pp>>qq;
t.id=t.x=t.y=0;q.push(t);int nn=0;
while(!q.empty()){
node a=q.front();q.pop();
///cout<<a.id<<' '<<a.x<<' '<<a.y<<' '<<f[a.id][a.x][a.y]<<endl;
if(a.id==n)break;
if(a.id>nn){
for(int j=0;j<=2000;j++){
g[0][j]=f[0][j];g[j][0]=f[j][0];
f[0][j]=0;f[j][0]=0;
flag[0][j]=0;flag[j][0]=0;
}
for(int i=1;i<=40;i++)
for(int j=1;j<=40;j++){
g[i][j]=f[i][j];f[i][j]=0;flag[i][j]=0;
} nn=a.id;
}
int i=a.id,x=a.x,y=a.y; for(int nx=0;nx*pp<=s[i+1];nx++){
int la=s[i+1]-nx*pp;
int ny=la/qq;
if(nx<=y&&ny<=x)
{
f[x-ny][y-nx]=max(f[x-ny][y-nx],g[x][y]+nx+ny);
if(!flag[x-ny][y-nx]){
flag[x-ny][y-nx]=1;
ne.id=i+1;ne.x=x-ny;ne.y=y-nx;
q.push(ne);
}
}
if(nx<=y&&ny>x){
f[0][y+ny-x-nx]=max(f[0][y+ny-x-nx],g[x][y]+nx+x);
if(!flag[0][y+ny-x-nx]){
flag[0][y+ny-x-nx]=1;
ne.id=i+1;ne.x=0;ne.y=y+ny-x-nx;
q.push(ne);
}
}
if(nx>y&&ny<=x){
f[nx+x-y-ny][0]=max(f[nx+x-y-ny][0],g[x][y]+ny+y);
if(!flag[nx+x-y-ny][0]){
flag[nx+x-y-ny][0]=1;
ne.id=i+1;ne.x=nx+x-y-ny;ne.y=0;
q.push(ne);
}
}
if(nx>y&&ny>x){
f[nx-y][ny-x]=max(f[nx-y][ny-x],g[x][y]+x+y);
if(!flag[nx-y][ny-x]){
flag[nx-y][ny-x]=1;
ne.id=i+1;ne.x=nx-y;ne.y=ny-x;
q.push(ne);
}
}
}
}
int ans=0;
for(int i=0;i<=2000;i++)
for(int j=0;j<=2000;j++)ans=max(ans,f[i][j]*(pp+qq));
cout<<ans<<endl;
return 0;
}

pq的更多相关文章

  1. PQ格式化虚拟机硬盘如何生效

    用pq格式化虚拟机硬盘后,安装时,总是从dhcp的网卡启动,没有从硬盘启动 但是用ghost是可以拷贝镜像文件的 这就是说,硬盘有了,但是没有将硬盘"激活",没有将硬盘设为acti ...

  2. (转)PQ分区魔术师中文版分区教程

    PQ分区魔术师中文版分区的图解,图文并茂很多朋友提到硬盘分区,觉得不敢轻易去尝试,怕得不偿失,深度xp系统下载在此分享下pq分区的图解详见下图: 1)这是用的雨林木风系统的光盘,其他系统盘一样 2)首 ...

  3. 已知整数m,n,p,q适合(m-p)|(mn+pq)证明:(m-p)|(mq+np)(整除理论1.1.5)

    已知整数m,n,p,q适合(m-p)|(mn+pq)证明:(m-p)|(mq+np) 证明: 令(mn+pq)—(mq+np) =mn-np+pq-mq =n(m-p)+q(p-m) =(n-q)(m ...

  4. 谓词逻辑 p->q 的真假

    若p为假,则q可取真或假,p->q为永真 若p为真,q为假,则p->q为假 若p为真,q为真,则p->q为真 p q p->q 0 0 1 0 1 1 1 0 0 1 1 1 ...

  5. 为什么因式分解n=pq分别得到pq是求解密钥中d的关键

    从d的来源来说,它是这样来的: "找到一个数d,使得ed-1能够被z整除.即给定e,选择数d,使得ed被z除的余数为1",即  ed=1 (mod z) 上面这句话中,为了求d,我 ...

  6. IQ/OQ/DQ/PQ

    Installation Qualification (IQ) 安装验证,安装时在用户处进行.它提供文件证明用户安装环境所有的规格及参数完全符合制造商的描述和安全 要求. Operation Qual ...

  7. QOS-基本拥塞管理机制(PQ CQ WFQ RTPQ)

    QOS-基本拥塞管理机制(PQ CQ WFQ RTPQ) 2018年7月7日    20:29 拥塞:是指当前供给资源相对于正常转发处理需要资源的不足,从而导致服务质量下降的一种现象 拥塞管理概述: ...

  8. CFS/FQ/PQ调度与WRR负载均衡

    动机 五一临近,四月也接近尾声,五一节乃小长假的最后一天.今天是最后一天工作日,竟然感冒了,半夜里翻来覆去无法安睡,加上窗外大飞机屋里小飞机(也就是蚊子)的骚扰,实在是必须起来做点有意义的事了!    ...

  9. RDA PQ工具使用 (Adi Analysis)

    PQ工具“ColorAdjustTool.exe”,请注意芯片的选择: RDA512C选择533 RDA8501选择331 RDA8503选择131  工模菜单 COLOR LUT: R/G/B/Y/ ...

随机推荐

  1. java Html&JavaScript面试题:用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. C++的XML编程经验――LIBXML2库使用指南

    C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...

  3. ajaxfileuplod 上传文件 essyui laoding 效果,防止重复上传文件

    //放于上传前 function ajaxLoading(){ $("<div class=\"datagrid-mask\"></div>&qu ...

  4. zabbix 密码忘记了如何恢复

    1.进入数据库 2.使用zabbix的数据库 use zabbix: 3.查看表信息 show tables; 4.搜索users表 select * from users; 5.修改userid为1 ...

  5. 二、MySQL 管理

    MySQL 管理 启动及关闭 MySQL 服务器 Windows 系统下 在 Windows 系统下,打开命令窗口(cmd),进入 MySQL 安装目录的 bin 目录. 启动: cd c:/mysq ...

  6. DeepFaceLab报错,OOM如何解决?

    DeepFaceLab出错,虽然错误提示好几个屏幕,但是无非两种情况,一种是驱动没装好,一种是显存配置不够.上一篇文章说了驱动的问题,这一篇就说说配置不够的问题. 这个问题的表现形式,往往是各种OOM ...

  7. 4 Template层 -定义模板

    1.模板介绍 作为Web框架,Django提供了模板,可以很便利的动态生成HTML 模版系统致力于表达外观,而不是程序逻辑 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一 ...

  8. 当我们在讨论CQRS时,我们在讨论些神马?

    当我写下这个标题的时候,我就有些后悔了,题目有点大,不太好控制.但我还是打算尝试一下,通过这篇内容来说清楚CQRS模式,以及和这个模式关联的其它东西.希望我能说得清楚,你能看得明白,如果觉得不错,右下 ...

  9. loj2291 「THUSC 2016」补退选

    ref pkusc 快到了,做点 thusc 的题涨涨 rp-- #include <iostream> #include <cstring> #include <cst ...

  10. python - 接口自动化测试 - HttpRequest - 接口测试类封装

    # -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: http_request.py @ide: PyCharm ...