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的更多相关文章

  1. Lightoj 1017 - Brush (III)

    1017 - Brush (III)    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Sam ...

  2. LightOJ 1017 - Brush (III) 记忆化搜索+细节

    http://www.lightoj.com/volume_showproblem.php?problem=1017 题意:给出刷子的宽和最多横扫次数,问被扫除最多的点是多少个. 思路:状态设计DP[ ...

  3. 1017 - Brush (III)

    1017 - Brush (III)   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Sami ...

  4. lightOJ 1017 Brush (III) DP

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1017 搞了一个下午才弄出来,,,,, 还是线性DP做的不够啊 看过数据量就知道 ...

  5. Light OJ 1017 - Brush (III)

    题目大意:     在一个二维平面上有N个点,散落在这个平面上.现在要清理这些点.有一个刷子刷子的宽度是w. 刷子上连着一根绳子,刷子可以水平的移动(在X轴方向上).他可以把刷子放在任何一个地方然后开 ...

  6. Trailing Zeroes (III)(lightoj 二分好题)

    1138 - Trailing Zeroes (III)   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit:  ...

  7. LightOJ1017 Brush (III)(DP)

    题目大概说一个平面上分布n个灰尘,现在要用一个宽w的刷子清理灰尘:选择一个起点,往水平线上扫过去这个水平线上的灰尘就消失了.问最多进行k次这样的操作能清理最多多少灰尘. 没什么的DP. 先按垂直坐标给 ...

  8. lightoj 1017

    思路:动态规划,设dp[i][j]表示在前j个dusts中用了i刷子刷掉dusts的个数:状态转移方程就是: dp[i][j] = max(dp[i][j-1], dp[i-1][j-len[j]] ...

  9. 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 ...

随机推荐

  1. 给EasyUi的Form加入自己主动填充部分输入框的方法

    依据项目须要,基于获取的数据对Form的部分输入框进行填充,而默认的EasyUI的Form 没有该方法.仅仅能一个输入框一个输入框的直接赋值,为此添加了Form对象的setValues,实现依据给定的 ...

  2. SequenceFile

    org.apache.hadoop.io包里的SequenceFile类提供了高效的二进制文件格式,它经常用于MapReduce作业的输出.尤其是当作业的输出被当做另一个作业的输入时.Sequence ...

  3. (C)理解#define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))

      理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b)) 嵌入式系统编程,要求程序员能够利用C语言访问固 ...

  4. get all sites under IIS

    https://stackoverflow.com/questions/2555668/how-to-programmatically-get-sites-list-and-virtual-dirs- ...

  5. java多线程实现简单队列

    1.创建Queue.java public class Queue { private LinkedList<Object> list = new LinkedList<Object ...

  6. 更改NavigationView侧滑菜单文字颜色

    NavigationView menu默认icon和title会随着菜单状态改变而改变,选择某个菜单后再次打开侧边菜单后会发现该菜单的icon和title会变成应用的主颜色,其他菜单项仍然为黑色. 如 ...

  7. Silverlight中使用MVVM(2)

    Silverlight中使用MVVM(1)--基础 Silverlight中使用MVVM(2)—提高 Silverlight中使用MVVM(3)—进阶 Silverlight中使用MVVM(4)—演练 ...

  8. Silverlight中使用MVVM(1)

    Silverlight中使用MVVM(1)   Silverlight中使用MVVM(1)--基础 Silverlight中使用MVVM(2)—提高 Silverlight中使用MVVM(3)—进阶 ...

  9. Python(1)(安装与基本使用)

    1.Python的下载和安装我就不废话了,百度上都有. 我安装的是Python 3.4.3 64bit 安装完之后,打开Cmd,输入Python 显示以上相同,按照百度的意思就是安装成功. 2.配置环 ...

  10. Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索

    Lucene 的四大索引查询  清单1:使用布尔操作符 Java代码      //Test boolean operator blic void testOperator(String indexD ...