CodeForces #369 C. Coloring Trees DP
题目链接:C. Coloring Trees
题意:给出n棵树的颜色,有些树被染了,有些没有。现在让你把没被染色的树染色。使得beauty = k。问,最少使用的颜料是多少。
K:连续的颜色为一组,一共有多少组。
颜料用量:p[i][j]表示第i棵树用颜料j染色 需要p[i][j]颜料。
思路:DP.
dp方程:dp[i][j][k] = a 表示前i棵树beauty = j,且第j棵树染色为k时,需要的最少颜料为a。
状态转移:初始化第一棵树dp[1][1][col[1]or(1~m)].
遍历剩下的2~n棵树i,beauty = j (1~min(k, i))时,如果已经被染色了,直接更新dp[i][j or (j+1)][col[i]]为min(dp[i-1][j][1~m])。
如果没被染色,尝试染第kkk(1~m)种颜色,并更新dp[i][j or (j+1)][kkk]为min(dp[i-1][j][kk]) (1<=kk<=m, 1<=KKK<=m)。
喜欢这个题。
#include <stdio.h>
#include <string.h>
#include <iostream>
#define maxn 210
#define inf 1e16
#define LL long long
using namespace std; int col[maxn];
int p[maxn][maxn];
LL dp[maxn][maxn][maxn]; int main() {
int n, m, k;
// freopen("in.cpp", "r", stdin);
while(~scanf("%d%d%d", &n, &m, &k)) {
//input
for (int i=1; i<=n; ++i) {
scanf("%d", &col[i]);
} for (int i=1; i<=n; ++i) {
for (int j=1; j<=m; ++j) {
scanf("%I64d", &p[i][j]);
}
} //init
for (int i=1; i<=n; ++i) {
for (int j=1; j<=k; ++j) {
for (int kk=1; kk<=m; ++kk) {
dp[i][j][kk] = inf;
}
}
}
if (col[1]) dp[1][1][col[1]] = 0;
else {
for (int i=1; i<=m; ++i) {
dp[1][1][i] = p[1][i];
}
} //solve
for (int i=2; i<=n; ++i) { ///第i棵树
for (int j=1; j<=i && j<=k; ++j) { /// i-1 beauty=j
if (col[i]) { ///第i棵树颜色已经有了
for (int kk=1; kk<=m; ++kk) { ///
if (kk == col[i])
dp[i][j][col[i]] = min(dp[i][j][col[i]], dp[i-1][j][kk]);
else dp[i][j+1][col[i]] = min(dp[i][j+1][col[i]], dp[i-1][j][kk]);
}
} else {
for (int kk=1; kk<=m; ++kk) { ///i
for (int kkk=1; kkk<=m; ++kkk) { ///i-1
if (kk == kkk)
dp[i][j][kk] = min(dp[i][j][kk], dp[i-1][j][kkk]+p[i][kk]);
else dp[i][j+1][kk] = min(dp[i][j+1][kk], dp[i-1][j][kkk]+p[i][kk]);
}
}
}
}
} LL ans = inf;
for (int i=1; i<=m; ++i) {
ans = min(ans, dp[n][k][i]);
}
if (ans == inf) ans = -1;
printf("%I64d\n", ans);
}
return 0;
}
CodeForces #369 C. Coloring Trees DP的更多相关文章
- codeforces 711C C. Coloring Trees(dp)
题目链接: C. Coloring Trees time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- Codeforces 711 C. Coloring Trees (dp)
题目链接:http://codeforces.com/problemset/problem/711/C 给你n棵树,m种颜色,k是指定最后的完美值.接下来一行n个数 表示1~n树原本的颜色,0的话就是 ...
- Codeforces Round #369 (Div. 2) C. Coloring Trees DP
C. Coloring Trees ZS the Coder and Chris the Baboon has arrived at Udayland! They walked in the pa ...
- Codeforces 677C. Coloring Trees dp
C. Coloring Trees time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...
- C. Coloring Trees DP
传送门:http://codeforces.com/problemset/problem/711/C 题目: C. Coloring Trees time limit per test 2 secon ...
- Codeforces 1027E Inverse Coloring 【DP】
Codeforces 1027E Inverse Coloring 题目链接 #include<bits/stdc++.h> using namespace std; #define N ...
- CodeForces 711C Coloring Trees (DP)
题意:给定n棵树,其中有一些已经涂了颜色,然后让你把没有涂色的树涂色使得所有的树能够恰好分成k组,让你求最少的花费是多少. 析:这是一个DP题,dp[i][j][k]表示第 i 棵树涂第 j 种颜色恰 ...
- Codeforces 596D Wilbur and Trees dp (看题解)
一直在考虑, 每一段的贡献, 没想到这个东西能直接dp..因为所有的h都是一样的. #include<bits/stdc++.h> #define LL long long #define ...
- 【Codeforces 711C】Coloring Trees
[链接] 我是链接,点我呀:) [题意] 连续相同的数字分为一段 你可以改变其中0为1~m中的某个数字(改变成不同数字需要不同花费) 问你最后如果要求分成恰好k段的话,最少需要多少花费 [题解] dp ...
随机推荐
- 湖大OJ-实验E----可判定的DFA的空问题
实验E----可判定的DFA的空问题 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB Total submit ...
- 《30天自制操作系统》14_day_学习笔记
harib11a--harib11c: 继续测试性能:我们在harib10h中进行了定时链表结构的改进“消除了移位处理”.下面我们设定490个定时器(它们都被设定启动50天才超时)来测试一下改进的效果 ...
- .net mvc onexception capture; redirectresult;
need to set filtercontext.result=new redirectresult('linkcustompage'); done. so... ASP.NET MVC异常处理模块 ...
- iOS9适配 之 关于info.plist 第三方登录 添加URL Schemes白名单
近期苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装. 受此影响,当你的应用在 ...
- Account Team使用说明
Account Team Account Team 以下简称客户小组. 背景介绍 帐户是与您的业务相关的公司和组织,每个帐户都存储了商家名称.地址和电话号码等信息.可以针对每个帐户存储相关的联系人. ...
- ubuntu常用命令记录集
1.查找当前目录下包含某字符串的文件 #find ./ -type f |xargs grep "string" 2.查找文件 #find ./ -name filename 3. ...
- jenkins插件开发-此路是我开
一:前置环境 1. JDK1.6+ 2. maven已安装 3. jenkins已搭建 4. eclipse已安装(并安装了maven插件) 以上环境可以百度搜索并安装 我的环境是WIN7 64位系统 ...
- 数据库事务的特性(ACID)
数据库的事务是数据库中一系列(增删查改)操作的集合. 一般来说,事务的范围根据业务而定,比如转账.修改个人信息 转账:从A账户将200元转移到B账户 从A账户中扣除200元 将200元加入到B账户中 ...
- Python3基础 把一个列表中内容给另外一个列表,形成两个独立的列表
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- 浅谈用ModelSim+Synplify+Quartus来实现Altera FPGA的仿真
浅谈用ModelSim+Synplify+Quartus来实现Altera FPGA的仿真 工作内容: Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业 ...