题目链接: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的更多相关文章

  1. codeforces 711C C. Coloring Trees(dp)

    题目链接: C. Coloring Trees time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  2. Codeforces 711 C. Coloring Trees (dp)

    题目链接:http://codeforces.com/problemset/problem/711/C 给你n棵树,m种颜色,k是指定最后的完美值.接下来一行n个数 表示1~n树原本的颜色,0的话就是 ...

  3. 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 ...

  4. Codeforces 677C. Coloring Trees dp

    C. Coloring Trees time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...

  5. C. Coloring Trees DP

    传送门:http://codeforces.com/problemset/problem/711/C 题目: C. Coloring Trees time limit per test 2 secon ...

  6. Codeforces 1027E Inverse Coloring 【DP】

    Codeforces 1027E Inverse Coloring 题目链接 #include<bits/stdc++.h> using namespace std; #define N ...

  7. CodeForces 711C Coloring Trees (DP)

    题意:给定n棵树,其中有一些已经涂了颜色,然后让你把没有涂色的树涂色使得所有的树能够恰好分成k组,让你求最少的花费是多少. 析:这是一个DP题,dp[i][j][k]表示第 i 棵树涂第 j 种颜色恰 ...

  8. Codeforces 596D Wilbur and Trees dp (看题解)

    一直在考虑, 每一段的贡献, 没想到这个东西能直接dp..因为所有的h都是一样的. #include<bits/stdc++.h> #define LL long long #define ...

  9. 【Codeforces 711C】Coloring Trees

    [链接] 我是链接,点我呀:) [题意] 连续相同的数字分为一段 你可以改变其中0为1~m中的某个数字(改变成不同数字需要不同花费) 问你最后如果要求分成恰好k段的话,最少需要多少花费 [题解] dp ...

随机推荐

  1. StringByAppendingPathComponent和stringByAppendingString的区别

    cyy:自我理解,不保证正确,但亲自试验确实可行:若用 stringByAppendingString  则需要手动在名称前加 “/”符号,而stringByAppendingPathComponen ...

  2. POJ 3683 Priest John's Busiest Day(2-SAT 并输出解)

    Description John is the only priest in his town. September 1st is the John's busiest day in a year b ...

  3. Mysql 设置utf-8 真正一劳永逸的方法

    用 bash 进入linux 之后,再 mysql -u root -p ,如果insert into 某个表,总是会出现乱码. 网上搜了一堆,其中一个老外的说法才适用.用 set names utf ...

  4. 如何设置一个严格30分钟过期的Session(转载)

    本文地址: http://www.laruence.com/2012/01/10/2469.html 今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: &quo ...

  5. Android--Retrofit+RxJava的简单封装(三)

    1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...

  6. C#属性和变量的区别学习

    参考一   昨天看三层架构 (具体没怎么弄懂) 发现一般有一页代码专门用户存放字段的 而且都用用属性封装..令我诧异的是 很多字段属性都存在 get{}和set{} 和普通的变量没什么区别(可读可写) ...

  7. awk改变了OFS,$0却没变化

    一个文件1.txt,内容如下 a b c d e 目的把列变行,输出为: a b c d e 脚本如下: awk 'BEGIN{RS="";FS="\n";OF ...

  8. Python—I/O多路复用

    一.I/O多路复用概念: 监听多个描述符的状态,如果描述符状态改变,则会被内核修改标志位,从而被进程获取进而进行读写操作 二.select,poll,epoll select模块,提供了:select ...

  9. quick cocos2dx lua 内存释放

    前言 对于内存的优化,网上有很多例子和教程.总体来说,就那么几种解决方案,在最后我会简单提下,这里先说下在quick中,对于图片的处理. 1.查看内存调试信息 对于quick框架的了解,我们可以参考\ ...

  10. I18N

    App.config <?xml version="1.0" encoding="utf-8" ?> <configuration> & ...