LightOJ 1017 - Brush (III) 记忆化搜索+细节
http://www.lightoj.com/volume_showproblem.php?problem=1017
题意:给出刷子的宽和最多横扫次数,问被扫除最多的点是多少个。
思路:状态设计DP[i][j]代表刷子下边界为i已用了j次时最大个数。决策为扫和跳过。
/** @Date : 2016-12-18 14:25:51
* @FileName: LightOJ 1017 DP?.cpp
* @Platform: Windows
* @Author : Lweleth (SoundEarlf@gmail.com)
* @Link : https://github.com/Lweleth
* @Version : $Id$
*/
// #include <stdio.h>
// #include <iostream>
// #include <string.h>
// #include <algorithm>
// #include <utility>
// #include <vector>
// #include <map>
// #include <set>
// #include <string>
// #include <stack>
// #include <queue>
#include<bits/stdc++.h>
#define LL long long
#define PII pair<int ,int>
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 1e5+20;
const double eps = 1e-8; int y[110];
int dp[110][110]; int n, w, k;
int ref(int s, int k)
{
if(s >= n || k < 1)
return 0;
if(dp[s][k] != -1)
return dp[s][k];
int sp, sk;
int cnt = 0;
int i;//考虑有负数的情况
for(i = s; i < n; i++)
{
if(y[i] - y[s] <= w)
cnt = i - s + 1;
else break;
}
sp = cnt + ref(i, k - 1);//选择扫
sk = ref(s + 1, k);//跳过 dp[s][k] = max(sp, sk);
return dp[s][k];
} int main()
{ int T;
int cnt = 0;
cin >> T;
while(T--)
{
scanf("%d%d%d", &n, &w, &k);
for(int i = 0; i < n; i++)
{
int x;
scanf("%d%d", &x, y + i);
}
sort(y, y + n);
MMG(dp);
int ans = ref(0, k);
printf("Case %d: %d\n", ++cnt, ans);
}
return 0;
}
LightOJ 1017 - Brush (III) 记忆化搜索+细节的更多相关文章
- 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) DP
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1017 搞了一个下午才弄出来,,,,, 还是线性DP做的不够啊 看过数据量就知道 ...
- HDU 1028 Ignatius and the Princess III 整数的划分问题(打表或者记忆化搜索)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1028 Ignatius and the Princess III Time Limit: 2000/1 ...
- lightoj 1283 - Shelving Books(记忆化搜索+区间dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1283 题解:这题很显然一看就像是区间dp,但是单纯的区间dp好像解决不了问题可 ...
- LA 6042 Bee Tower 记忆化搜索
一开始读漏了很多细节,用递推写死活跑不出样例. 把题目中的细节列一下吧,状态方程很好推,改成记忆化搜索之后代码也很清晰. 1.蜜蜂需要到最高的塔去,最高的塔可能不止一个,抵达任意一个即可. 2.蜜蜂每 ...
- Codevs_1017_乘积最大_(划分型动态规划/记忆化搜索)
描述 http://codevs.cn/problem/1017/ 给出一个n位数,在数字中间添加k个乘号,使得最终的乘积最大. 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提 ...
- 8636 跳格子(dfs+记忆化搜索)
8636 跳格子 该题有题解 时间限制:2457MS 内存限制:1000K提交次数:139 通过次数:46 题型: 编程题 语言: G++;GCC Description 地上有一个n*m 的数 ...
- P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 记忆化搜索dfs
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- 【BZOJ4428】[Nwerc2015]Debugging调试 记忆化搜索+分块
[BZOJ4428][Nwerc2015]Debugging调试 Description 你看中的调试器将不会在这件事上帮助你.有代码可以通过多种方式在调试与正式发布的间隙发生不同的行为,当出现这种情 ...
随机推荐
- C++ auto_ptr智能指针的用法
C++中指针申请和释放内存通常采用的方式是new和delete.然而标准C++中还有一个强大的模版类就是auto_ptr,它可以在你不用的时候自动帮你释放内存.下面简单说一下用法. 用法一: std: ...
- Storm事务Topology的接口介绍
ITransactionalSpout 基本事务Topology的Spout接口,内含两部分接口:协调Spout接口以及消息发送Blot接口. TransactionalSpoutBatchExe ...
- java第九周笔记
- CCF——图像旋转201503-1
问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度. 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可. 输入格式 输入的第一行包含 ...
- PHP创建对象的几种形式
创建对象的几种形式 class C1{ var $p1 = 1; //定义一个属性: } 形式1: $o1 = new C1(); //通过一个类,去new出一个对象 形式2: $o2 = new ...
- xstream 解析xml报文
一.xml一种格式的数据转换为对象 pom.xml引入 <!--javaBean和XML的双向转换--> <dependency> <groupId>com.tho ...
- 【C++】指针和引用
引用: 引用(reference)是为对象起了另外一个名字,引用类型应用(refers to)另外一种类型.通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名. 一般初始化变量时, ...
- Android手机Fiddler真机抓包
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许用户监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于事件脚本的子系统 ...
- noip模拟题《序》sort
[问题背景] zhx 给他的妹子们排序.[问题描述] zhx有N个妹子,他对第i个妹子的好感度为ai, 且所有ai两两不相等.现在N个妹子随意站成一 排,他要将她们根据好感度从小到 ...
- [codeforces696B]Puzzles
B. Puzzles time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...