小小粉刷匠(区间 dp)
小小粉刷匠
题目描述
“lalala,我是一个快乐的粉刷匠”,小名一边快活地唱着歌,一边开心地刷着墙",兴致突然被打断,“小名,你今天如果刷不完这一栋楼的墙,那么你就等着被炒鱿鱼吧”,老板声嘶力竭的吼着。苦恼的小名因为不想被炒鱿鱼,所以希望尽量快地刷完墙,由于他本人的数学基础很差,他现在请你来帮助他计算最少完成每一堵墙需要刷多少次。每一面墙有n个段,对于每个段指定一个目标颜色ci。刚开始的时候所有的墙壁为白色,我们现在有一个刷子,刷子长度为k,刷子每次可以选择一种颜色,然后选择段数为(1~k)连续的墙段刷成选择的一种颜色。我们现在想要知道,为了把墙变成目标颜色,最少刷多少次(保证指定的目标颜色一定不为白色)。
输入描述:
对于每一个案例,我们第一行包括两个整数n,k(1<=n<=100,1<=k<=50,k<n),表示墙的长度为n,刷子的长度为k。第二行输入n个整数(c1c2…cn),(1<=ci<=256),表示对于墙的每一段指定的颜色。
输出描述:
输出一个数,表示小名最少刷多少次。
示例1
输入
3 3
1 2 1
输出
2
示例2
输入
5 4
5 4 3 3 4
输出
3
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <map>using namespace std;
//指定颜色
int c[200], dp[200][200];int main() {//墙,刷子int n, kk;scanf("%d%d", &n, &kk);for (int i = 1; i <= n; i++) {scanf("%d", &c[i]);dp[i][i] = 1;}for (int len = 2; len <= n; len++) {for (int i = 1; i + len <= n + 1; i++) {int j = i + len - 1;dp[i][j] = dp[i + 1][j] + 1;if (len <= kk) {for (int k = i + 1; k <= j; k++) {if (c[i] == c[k]) {dp[i][j] = min(dp[i][j], dp[i + 1][k] + dp[k + 1][j]);}}} else {for (int k = i; k <= j; k++) {dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j]);}}}}printf("%d\n", dp[1][n]);return 0;
}
小小粉刷匠(区间 dp)相关推荐
- bzoj1296 [SCOI2009]粉刷匠 区间dp+背包
每一条都是独立的,所以可以分开处理 对于一条,粉刷一定是粉刷完完整的一条是最优的(不会有比它优的),所以枚举次数起点转移 不同条之间就是分组背包的关系了.. 码: #include<iostre ...
- 小小粉刷匠 牛客(区间dp)
链接:https://ac.nowcoder.com/acm/problem/16129 来源:牛客网 题目描述 "lalala,我是一个快乐的粉刷匠",小名一边快活地唱着歌,一边 ...
- 刷题记录:牛客NC16129小小粉刷匠
传送门:牛客 题目描述: "lalala,我是一个快乐的粉刷匠",小名一边快活地唱着歌,一边开心地刷着墙",兴致突然被打断,"小名,你今天如果刷不 完这一栋楼的 ...
- 【题解】P4158 [SCOI2009]粉刷匠(DP,背包)
[题解]P4158 [SCOI2009]粉刷匠 是一道资源规划 DP 的好题,但是我想了很久还去看了题解./kk我真菜. 题目链接 P4158 [SCOI2009]粉刷匠 - 洛谷 题意概述 发现自己 ...
- bzoj 1296: [SCOI2009]粉刷匠(DP+DP)
1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2339 Solved: 1348 [Submit][Sta ...
- P4158-[SCOI2009]粉刷匠【dp,背包】
正题 https://www.luogu.com.cn/problem/P4158 题目大意 nnn个墙长度为mmm,每次可以粉刷一堵墙的连续一段区间,粉刷过的不能再粉刷.给出每个位置应该粉刷的颜色, ...
- [洛谷]P4158 [SCOI2009]粉刷匠 (#线性dp+背包dp)
题目描述 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个格子最多只能被 ...
- BZOJ1296(SCOI2009)[粉刷匠]--背包+DP
[链接] bzoj1296 [解题报告] 很容易想到背包定义g[i][j]g[i][j]表示目前推了ii行,共刷了jj次. 然后我们再对每一行进行考虑. 定义f[i][j]f[i][j]表示目前推到第 ...
- 【题解】洛谷P4158 [SCOI2009] 粉刷匠(DP)
次元传送门:洛谷P4158 思路 f[i][j][k][0/1]表示在坐标为(i,j)的格子 已经涂了k次 (0是此格子涂错 1是此格子涂对)涂对的格子数 显然的是 每次换行都要增加一次次数 那么当j ...
最新文章
- 2022-2028中国曝光机市场现状及未来发展趋势
- 快过年了,博客园里的文章也变少了
- Intel 64/x86_64/IA-32/x86处理器 - 通用指令(4) - 比特位设置指令/字节设置指令
- QMessagebox简单使用
- python50种算法_一文洞悉Python必备50种算法
- app icon在线生成
- 记一次springboot应用偶发502错误的排查过程
- Nicholas C. Zakas谈怎样才能成为优秀的前端工程师
- 常用的ODI映射与过滤命令
- 香港马市、田忌赛马?这款游戏 IP 碉堡了
- 微信小程序注册提示邮箱已被占用
- 怎么用python电商文本挖掘?(5)
- SDL入门教程(七):SDL抠色(Color Keying)
- matlab中filtfilt函数解析
- 八七、Node.js事件循环与多进程
- 2019 siggraph_观看SIGGRAPH 2019的Unity图形会议
- AndroidStudio写的个人信息修改界面
- xp如何添加桌面计算机回收站,xp系统桌面回收站不见了怎么办
- Ubuntu16.04安装Matlab2015a_hudingyin_新浪博客
- 泛泰SKYA850黑砖QHSUSB_DLOAD救砖教程(操作篇)[2013.6.3更新]