问题描述
  小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。

  小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起。如果两人分差小于或大于K,系统都不会将他们匹配。

  现在小明知道这个网站总共有N名用户,以及他们的积分分别是A1, A2, ... AN。

  小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都匹配不起来(任意两名用户积分差不等于K)?

输入格式
  第一行包含两个个整数N和K。
  第二行包含N个整数A1, A2, ... AN。

  对于30%的数据,1 <= N <= 10
  对于100%的数据,1 <= N <= 100000, 0 <= Ai <= 100000, 0 <= K <= 100000

输出格式
  一个整数,代表答案。
样例输入
10 0
1 4 2 8 5 7 1 4 2 8
样例输出
6
 
解题过程:
据说是贪心的题目,可惜死都看不懂,只好看看大众的dp。
统计各个积分的人数,存在cnt数组里,下标为分数,元素内容为人数。相差k分的人分为一组,一组人dp一次,求一组人的最大值,累加各组dp值。
比如:k=3
分数为0  3  6  9  12的人为一组
分数为1  4  7  10 13的人为一组
通过取和不取该分数的人数来找到最大值。
假设到了6这个分数,取6这个分数的人,就不能取分数为3的人,但是能取分数为0的人数。
dp[6]=max(dp[0]+cnt[6],dp[3])
假设到了3这个分数,取3这个分数的人,就不能取分数为0的人,但是没有分数比0更低的dp值,改变dp式子。
dp[3]=max(cnt[3],dp[0])
假设到了0这个分数,显然取是最大的情况,则dp式为:
dp[0]=cnt[0]
另外,对于k=0分情况讨论即可,每种分数取一个人,就匹配不了。
 #include<stdio.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<stack>
#include<set>
#include<queue>
#include<cstring>
#define ll long long
using namespace std; int n,k,x;
int dp[];///开这么大,防止k巨大,数组越界
int cnt[]; int main()
{
memset(dp,,sizeof(dp));
scanf("%d%d",&n,&k);
int maxx=-,ans=;
for(int i=;i<n;i++)
{
scanf("%d",&x);
cnt[x]++;
maxx=max(maxx,x);
}
if(k)
for(int i=;i<k;i++)///i对应分组 0到k-1这k个分组
{
int j;
for(j=i;j<=maxx;j=j+k)
{
if(j-*k>=)
dp[j]=max(dp[j-*k]+cnt[j],dp[j-k]);///取和不取
else if(j-k>=)
dp[j]=max(cnt[j],dp[j-k]);
else
dp[j]=cnt[j];
}
ans+=dp[j-k];///跳出循环的j超过maxx了
}
else
for(int i=;i<=maxx;i++)
if(cnt[i])
ans++;
printf("%d\n",ans);
return ;
}

历届试题 对局匹配-(dp)的更多相关文章

  1. 蓝桥杯 试题 历届试题 对局匹配 DP解决

    问题描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起.如果两人分差 ...

  2. 转 蓝桥杯 历届试题 波动数列 [ dp ]

    传送门   历届试题 波动数列   时间限制:1.0s   内存限制:256.0MB     锦囊1   锦囊2   锦囊3   问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个 ...

  3. 蓝桥杯历届试题-垒色子(DP+矩阵快速幂)

    一.题目 垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体.经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!我们先来规范一下骰子: ...

  4. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  5. 算法笔记_172:历届试题 波动数列(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度 ...

  6. 算法笔记_183:历届试题 九宫重排(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成 ...

  7. 算法笔记_176:历届试题 最大子阵(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大. 其中,A的子矩阵指在A中行和列均连续的一块. 输入格式 输入 ...

  8. 蓝桥 PREV-30 历届试题 波动数列 【动态规划】

      历届试题 波动数列   时间限制:1.0s   内存限制:256.0MB      问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. ...

  9. Java实现蓝桥杯第八届决赛 对局匹配

    标题:对局匹配 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起.如果两 ...

随机推荐

  1. Ubuntu下安装virtualbox: RTR3InitEx failed with rc=-1912 (rc=-1912)

    下载好合适的安装包: http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html 然后进行安装,配 ...

  2. PYTHON语言书库

    <SELENIUM 2 自动化测试实战 基于PYTHON语言>pdf 附下载链接 本书下载链接:https://pan.baidu.com/s/1A1s6UHecXd1Z465zbLumh ...

  3. 了解Katalon的安装及基本使用(for mac)

    一.整体了解: 2018 top 6的自动化测试工具(网上了解): 1. Selenium 2. Katalon Studio 3. UFT 4. Watir 5. IBM Rational Func ...

  4. [Oracle,2018-01-11] 导出数据库说明文档

    select A.table_name,A.column_name,A.data_type,A.DATA_LENGTH,B.comments from user_tab_columns A,user_ ...

  5. Git上传项目失败:Push rejected: Push to origin/master was rejected

    解决方案如下: 1.切换到自己项目所在的目录,右键选择GIT BASH Here,Idea中可使用Alt+F12 打开终端 2.在terminl窗口中依次输入命令: git pull git pull ...

  6. [UGUI]图文混排(二):Text源码分析

    UGUI源码: https://bitbucket.org/Unity-Technologies/ui/downloads/?tab=tags 首先下载一份UGUI源码,这里我下载的版本是5.3.2f ...

  7. My sql 自增 虚拟列。

    在MYSQL 是没有类似MSSQL 2008 / oracle 数据库开窗函数 over() ,rank(), DENSE_RANK() ,ROW_NUMBER() 又叫窗口函数 . 当我们需要在查询 ...

  8. 不用MathType, 如何在Mac Word中插入公式

    不用MathType, 如何在Mac Word中插入公式 找了好久都找不到MathType的破解版,不得不使用免费清爽的MarkDown编辑工具Typora_for_Mac. 我是很喜欢Typora的 ...

  9. 《算法》第三章部分程序 part 2

    ▶ 书中第三章部分程序,加上自己补充的代码,平衡二叉搜索树 ● 平衡二叉搜索树 package package01; import java.util.NoSuchElementException; ...

  10. python中from __future__ import division

    ppython2.7版本中整数相除得出的结果不显示小数 a = 9 / 2 print(a) 输出结果: 4 此时就需要调用from __future__ import division 1 from ...