题目链接:http://lightoj.com/volume_showproblem.php?problem=1017

题意:给你一个无限大的平面(2D)上面有N个 点,一个宽w的刷子,最多使用k次,每次使用只能横着水平刷一次。问刷k次后刷过的地方最多可以覆盖多少个点。

思路:其实读完题就知道这个题和x坐标没关系,我们只需要关心每一个点的y坐标就行了。可以动态规划,输入完后给每一个点的y坐标从小到大排序,定义dp(i,k)为前i个点刷了k次后最大能刷到的点数。转移的时候有两种情况,一种是之前刷了k次了,这里不刷,即dp(i-1,k);另一种是从大到小枚举j从(i~1),找到这个刷子能覆盖到的最大宽度,更新dp(i,k)=max(dp(i,k), dp(j-1,k-1)+cnt)即可。

  1 /*
  2 ━━━━━┒ギリギリ♂ eye!
  3 ┓┏┓┏┓┃キリキリ♂ mind!
  4 ┛┗┛┗┛┃\○/
  5 ┓┏┓┏┓┃ /
  6 ┛┗┛┗┛┃ノ)
  7 ┓┏┓┏┓┃
  8 ┛┗┛┗┛┃
  9 ┓┏┓┏┓┃
 10 ┛┗┛┗┛┃
 11 ┓┏┓┏┓┃
 12 ┛┗┛┗┛┃
 13 ┓┏┓┏┓┃
 14 ┃┃┃┃┃┃
 15 ┻┻┻┻┻┻
 16 */
 17 #include <algorithm>
 18 #include <iostream>
 19 #include <iomanip>
 20 #include <cstring>
 21 #include <climits>
 22 #include <complex>
 23 #include <fstream>
 24 #include <cassert>
 25 #include <cstdio>
 26 #include <bitset>
 27 #include <vector>
 28 #include <deque>
 29 #include <queue>
 30 #include <stack>
 31 #include <ctime>
 32 #include <set>
 33 #include <map>
 34 #include <cmath>
 35 using namespace std;
 36 #define fr first
 37 #define sc second
 38 #define cl clear
 39 #define BUG puts("here!!!")
 40 #define W(a) while(a--)
 41 #define pb(a) push_back(a)
 42 #define Rint(a) scanf("%d", &a)
 43 #define Rll(a) scanf("%lld", &a)
 44 #define Rs(a) scanf("%s", a)
 45 #define Cin(a) cin >> a
 46 #define FRead() freopen("in", "r", stdin)
 47 #define FWrite() freopen("out", "w", stdout)
 48 #define Rep(i, len) for(int i = 0; i < (len); i++)
 49 #define For(i, a, len) for(int i = (a); i < (len); i++)
 50 #define Cls(a) memset((a), 0, sizeof(a))
 51 #define Clr(a, x) memset((a), (x), sizeof(a))
 52 #define Full(a) memset((a), 0x7f7f, sizeof(a))
 53 #define lrt rt << 1
 54 #define rrt rt << 1 | 1
 55 #define pi 3.14159265359
 56 #define RT return
 57 #define lowbit(x) x & (-x)
 58 #define onenum(x) __builtin_popcount(x)
 59 typedef long long LL;
 60 typedef long double LD;
 61 typedef unsigned long long ULL;
 62 typedef pair<int, int> pii;
 63 typedef pair<string, int> psi;
 64 typedef pair<LL, LL> pll;
 65 typedef map<string, int> msi;
 66 typedef vector<int> vi;
 67 typedef vector<LL> vl;
 68 typedef vector<vl> vvl;
 69 typedef vector<bool> vb;
 70
 71 const int maxn = 110;
 72
 73 int n, K, w;
 74 int dp[maxn][maxn];
 75 int y[maxn];
 76
 77 int main() {
 78     // FRead();
 79     int T, _ = 1, x;
 80     Rint(T);
 81     W(T) {
 82         Rint(n); Rint(w); Rint(K);
 83         For(i, 1, n+1) {
 84             Rint(x); Rint(y[i]);
 85         }
 86         sort(y+1, y+n+1);
 87         Cls(dp);
 88         For(i, 1, n+1) {
 89             For(k, 1, K+1) {
 90                 dp[i][k] = dp[i-1][k];
 91                 int cnt = 0;
 92                 for(int j = i; j >= 1; j--) {
 93                     if(y[i] - y[j] > w) break;
 94                     cnt++;
 95                     dp[i][k] = max(dp[i][k], dp[j-1][k-1]+cnt);
 96                 }
 97             }
 98         }
 99         int ret = -1;
100         For(i, 1, K+1) ret = max(dp[n][i], ret);
101         printf("Case %d: %d\n", _++, ret);
102     }
103     RT 0;
104 }

转载于:https://www.cnblogs.com/kirai/p/5579252.html

[LightOJ1017]Brush (III)(dp)相关推荐

  1. LeetCode 1406. 石子游戏 III(DP)

    1. 题目 Alice 和 Bob 用几堆石子在做游戏.几堆石子排成一行,每堆石子都对应一个得分,由数组 stoneValue 给出. Alice 和 Bob 轮流取石子,Alice 总是先开始.在每 ...

  2. LeetCode 1216. 验证回文字符串 III(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给出一个字符串 s 和一个整数 k,请你帮忙判断这个字符串是不是一个「K 回文」. 所谓「K 回文」:如果可以通过从字符串中删去最多 k 个字符将其转换为 ...

  3. LeetCode 1473. 给房子涂色 III(DP)

    1. 题目 在一个小城市里,有 m 个房子排成一排,你需要给每个房子涂上 n 种颜色之一(颜色编号为 1 到 n ). 有的房子去年夏天已经涂过颜色了,所以这些房子不需要被重新涂色. 我们将连续相同颜 ...

  4. leetcode 1473. 粉刷房子 III(dp)

    在一个小城市里,有 m 个房子排成一排,你需要给每个房子涂上 n 种颜色之一(颜色编号为 1 到 n ).有的房子去年夏天已经涂过颜色了,所以这些房子不需要被重新涂色. 我们将连续相同颜色尽可能多的房 ...

  5. leetcode 123. 买卖股票的最佳时机 III(dp)

    给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的 ...

  6. LeetCode 198. 打家劫舍(DP)

    1. 题目 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给 ...

  7. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  8. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  9. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

最新文章

  1. jquery selector 使用方法
  2. MPU6050首例整合性6轴的姿态模块(转)
  3. ipone android 省流量,总担心 iPhone 偷跑流量如何解决?iPhone 如何设置可以节省流量?...
  4. 小程序上拉加载,下拉刷新
  5. FatFs最新版本获取方法
  6. 优秀小程序demo 源码
  7. NVIDIA PhysX宣布正式开源 最强物理仿真引擎
  8. 超酷的界面原型设计工具Balsamiq Mockups
  9. try{}catch(){}finally{}执行顺序和return结果顺序的理解03
  10. html表格中文字换行设置
  11. “快手极速版”的模拟器多开方法
  12. 实战内容(13)- Invalid audio stream. Exactly one MP3 audio stream is required.
  13. 使用ESP8266接入阿里云物联网平台(阿里 云智能APP)可远程控制电脑开关机,灯光等设备 CP2102, CH340
  14. 华南理工大学php,华南理工大学网络教育平台v3
  15. 关于Hadoop在java客户端进行下载时的异常java.io.FileNotFoundException: Hadoop home directory is no existed的解决办法
  16. 员工办事指南(社保公积金)
  17. 问题解决:Docker之DOCKER_OPTS参数不生效
  18. 刚子扯谈 活着 没那么简单
  19. python 学习日志(3)旋转角--改进
  20. mysql_store_result和mysql_use_result的区别

热门文章

  1. 微信小程序设置导航栏标题颜色
  2. FlyBanner+RecyclerView显示+MVP
  3. URL详细分析及在python中处理URL
  4. 机器学习 - 机器学习理论基础
  5. PDF通用工具其他下载地址
  6. 好几张图片合成一个PDF,不能错过的小技巧!
  7. 手机互动网页项目总结(转)
  8. cross-site tracing XST攻击
  9. Spring Boot教程(二十五)返回JSON格式
  10. 初学者如何查阅自然语言处理(NLP)领域学术会议