Brush (III) LightOJ - 1017
题意:有一些点,每刷一次可以将纵坐标在区间(y1,y1+w)范围内的所有点刷光,y1为任何实数。最多能刷k次,求最多共能刷掉几个点。
先将点按照纵坐标从小到大排序。
显然,横坐标没有任何作用。记p[i]为排序后第i个点的纵坐标。
显然,每一次以某个点的纵坐标为y1来刷,一定不会比以其他的数为y1来刷更差。
记x[i]为以第i个的纵坐标为y1来刷能刷掉的点的数量。容易预处理出来。
ans[i][j]表示以第i个的纵坐标为y1,刷j次能刷掉的点数量的最大值。那么ans[i][1]首先就可以有一个值为x[i]。其次,ans[i][j]也可以由之前的状态(ans[j1][j-1])转移过来。由于如果p[j1]+w>=p[i],那么会导致清除的点有重复,因此只有p[j1]+w<p[i]时才能转移。转移时的操作就是$ans[i][j]=max(ans[i][j],ans[j1][j-1]+x[i])$。
最后答案就是所有ans[i][j]中最大值。
修改记录:
1.原先做了离散化,后来发现没用,就去掉了
2.原先在36和37行之间多了几行
for(j=;j<=k;j++)
for(j1=;j1<i;j1++)
ans[i][j]=max(ans[i][j],ans[j1][j]);
发现没用,就去掉了。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int p[],x[],ans[][];
int T,TT,n,w,k,maxans;
int main()
{
int i,j,j1,t;
scanf("%d",&T);
for(TT=;TT<=T;TT++)
{
scanf("%d%d%d",&n,&w,&k);
for(i=;i<=n;i++)
scanf("%d%d",&t,&p[i]);
sort(p+,p+n+);
maxans=;
memset(ans,,sizeof(ans));
memset(x,,sizeof(x));
for(i=;i<=n;i++)
for(j=i;j<=n;j++)
{
if(p[j]-p[i]>w) break;
x[i]++;
}
for(i=;i<=n;i++)
{
ans[i][]=x[i];
maxans=max(maxans,ans[i][]);
for(j=;j<=k;j++)
for(j1=;j1<i;j1++)
{
if(p[i]-p[j1]<=w) break;
ans[i][j]=max(ans[i][j],ans[j1][j-]+x[i]);
maxans=max(maxans,ans[i][j]);
}
}
printf("Case %d: %d\n",TT,maxans);
}
return ;
}
Brush (III) LightOJ - 1017的更多相关文章
- Lightoj 1017 - Brush (III)
1017 - Brush (III) PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Sam ...
- LightOJ 1017 - Brush (III) 记忆化搜索+细节
http://www.lightoj.com/volume_showproblem.php?problem=1017 题意:给出刷子的宽和最多横扫次数,问被扫除最多的点是多少个. 思路:状态设计DP[ ...
- 1017 - Brush (III)
1017 - Brush (III) PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Sami ...
- lightOJ 1017 Brush (III) DP
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1017 搞了一个下午才弄出来,,,,, 还是线性DP做的不够啊 看过数据量就知道 ...
- Light OJ 1017 - Brush (III)
题目大意: 在一个二维平面上有N个点,散落在这个平面上.现在要清理这些点.有一个刷子刷子的宽度是w. 刷子上连着一根绳子,刷子可以水平的移动(在X轴方向上).他可以把刷子放在任何一个地方然后开 ...
- Trailing Zeroes (III)(lightoj 二分好题)
1138 - Trailing Zeroes (III) PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: ...
- LightOJ1017 Brush (III)(DP)
题目大概说一个平面上分布n个灰尘,现在要用一个宽w的刷子清理灰尘:选择一个起点,往水平线上扫过去这个水平线上的灰尘就消失了.问最多进行k次这样的操作能清理最多多少灰尘. 没什么的DP. 先按垂直坐标给 ...
- lightoj 1017
思路:动态规划,设dp[i][j]表示在前j个dusts中用了i刷子刷掉dusts的个数:状态转移方程就是: dp[i][j] = max(dp[i][j-1], dp[i-1][j-len[j]] ...
- Trailing Zeroes (III) LightOJ - 1138(二分)
You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in d ...
随机推荐
- easyUI datagrid组件能否有display:none的隐藏效果
这个项目用了JQ easyUI datagrid 组件,我今天做了一个页面,页面有个div层,div里放了一个easyUI datagrid,页面初始化时div隐藏(display:none),通过点 ...
- hibernate工作原理及作用
转载自 http://www.cnblogs.com/dashi/p/3597969.html#commentform JAVA Hibernate工作原理及为什么要用 hibernate 简介:hi ...
- 三张图教你生成一个Android jar 库。
我看到非常多教人使用第三方开源组件的Android教程.都是在教基于源代码project的库导入,个人觉得非常不妥,觉得最恰当的方式是把源代码project生成一个jar再导入到目标project上使 ...
- Kubernetes实战阅读笔记--1、介绍
1.业界根据云计算提供服务资源的类型将其划分为三大类: 基础设施即服务(Infrastructure-as-a-Service,IaaS).平台即服务(Platform-as-a-Service,Pa ...
- List 调用 remove 方法时抛出 java.lang.UnsupportedOperationException 异常原因
原因 使用 Arrays.asList(arr) 转换的 List 并不能进行 add 和 remove 操作. Arrays.asList(arr) 返回的类型是 Aarrays$Arr ...
- armel、armhf和arm64
1 这些名词是什么的缩写 1.1 armel 是arm eabi little endian的缩写.eabi是软浮点二进制接口,这里的e是embeded,是对于嵌入式设备而言. 1.2 armhf 是 ...
- virtualbox创建centos7虚拟机
安装Virtualbox 下载安装: 直接到官网上下载,https://www.virtualbox.org/wiki/Downloads 然后一键傻瓜式的安装即可. 设置默认虚拟电脑位置: 管理=& ...
- C# XML序列化与反序列化与XML格式详解
1.https://www.cnblogs.com/sandyliu1999/p/4844664.html XML是有层次结构的,序列化实际就是内存化,用连续的结构化的内存来存储表示一个对象,那么这两 ...
- 怎么显示隐藏Mac上的隐藏文件
打开终端,输入:defaults write com.apple.finder AppleShowAllFiles -bool true 此命令显示隐藏文件defaults write com.app ...
- HDU 2746 Cyclic Nacklace
Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...