博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ 1296] 粉刷匠
阅读量:5096 次
发布时间:2019-06-13

本文共 693 字,大约阅读时间需要 2 分钟。

Link :

 

Solution:

还是自己DP做少了啊,这种**题一开始还做错了

 

由于每一条木板间是独立的,且涉及到染色次数的分配

要想到对木板间进行分组DP

 

而要实现分组DP就要先求出每条木板上染色$x$次能贡献的最大答案

这个用背包DP$O(n^3)$就行了

 

Code:

#include 
using namespace std;const int MAXN=55;char s[MAXN];int n,m,t,sum[MAXN],f[MAXN][2500+10],g[MAXN][MAXN],res=0;int main(){ scanf("%d%d%d",&n,&m,&t); for(int i=1;i<=n;i++) { scanf("%s",s+1);memset(g,0,sizeof(g)); for(int j=1;j<=m;j++) sum[j]=sum[j-1]+(s[j]=='1'); for(int j=1;j<=m;j++) //背包DP for(int k=1;k<=m;k++) for(int l=0;l

 

Review:

还是对各类DP模型不够敏感

1、如果每组数之间相对独立且涉及到权重的分配,考虑使用分组DP(本质也是一种背包)

2、一般能化简成求前$i$个里进行$j$次操作最值问题的,使用背包DP

转载于:https://www.cnblogs.com/newera/p/9119368.html

你可能感兴趣的文章
软件开发和软件测试,我该如何选择?(蜗牛学院)
查看>>
基本封装方法
查看>>
生活大爆炸之何为光速
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
在centos上开关tomcat
查看>>
无人值守安装linux系统
查看>>