【链接】 我是链接,点我呀:)

【题意】

连续相同的数字分为一段
你可以改变其中0为1~m中的某个数字(改变成不同数字需要不同花费)
问你最后如果要求分成恰好k段的话,最少需要多少花费

【题解】

dp[i][j][k]前i棵树,分成j段,第j段最后一棵树颜色为m的最小花费
很好转移了,分情况就好

【代码】

import java.io.*;
import java.util.*; public class Main { static InputReader in;
static PrintWriter out; public static void main(String[] args) throws IOException{
//InputStream ins = new FileInputStream("E:\\rush.txt");
InputStream ins = System.in;
in = new InputReader(ins);
out = new PrintWriter(System.out);
//code start from here
new Task().solve(in, out);
out.close();
} static int N = 100;
static class Task{ int n,m,k;
long dp[][][] = new long[N+10][N+10][N+10];
int p[][] = new int[N+10][N+10];
int c[] = new int[N+10];
//dp[i][j][k]前i棵树,分成j段,第j段最后一棵树颜色为m的最小花费 public void solve(InputReader in,PrintWriter out) {
n = in.nextInt(); m = in.nextInt();k = in.nextInt();
for (int i = 1;i <= n;i++) c[i] = in.nextInt();
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
p[i][j] = in.nextInt();
for (int i = 0;i <=N;i++)
for (int j = 0;j <= N;j++)
for(int k = 0;k <=N;k++)
dp[i][j][k] = -1;
if (c[1]==0) {
for (int j = 1;j <= m;j++) {
dp[1][1][j] = p[1][j];
}
}else {
dp[1][1][c[1]] = 0;
}
for (int i = 1;i < n;i++)
for (int j = 1;j <= k;j++)
for (int l = 1;l <= m;l++) {
if (dp[i][j][l]!=-1) {
if(c[i+1]==0) {
for (int l2=1;l2<=m;l2++) {
long temp = dp[i][j][l] + p[i+1][l2];
if (l2==l){
if (dp[i+1][j][l2]==-1) {
dp[i+1][j][l2] = temp;
}else {
dp[i+1][j][l2] = Math.min(dp[i+1][j][l2],temp);
}
}else {
if (dp[i+1][j+1][l2]==-1) {
dp[i+1][j+1][l2] = temp;
}else {
dp[i+1][j+1][l2] = Math.min(dp[i+1][j+1][l2], temp);
}
}
}
}else {
//c[i+1]=x
if (c[i+1]==l) {
if (dp[i+1][j][l]==-1) {
dp[i+1][j][l] = dp[i][j][l];
}else {
dp[i+1][j][l] = Math.min(dp[i+1][j][l], dp[i][j][l]);
}
}else {
if (dp[i+1][j+1][c[i+1]]==-1) {
dp[i+1][j+1][c[i+1]] = dp[i][j][l];
}else {
dp[i+1][j+1][c[i+1]] = Math.min(dp[i+1][j+1][c[i+1]], dp[i][j][l]);
}
}
}
}
}
//dp[n][k][1~m]
long ma = -1;
for (int i = 1;i <= m;i++)
if (dp[n][k][i]!=-1) {
if (ma==-1)
ma = dp[n][k][i];
else
ma = Math.min(ma, dp[n][k][i]);
}
out.println(ma);
}
} static class InputReader{
public BufferedReader br;
public StringTokenizer tokenizer; public InputReader(InputStream ins) {
br = new BufferedReader(new InputStreamReader(ins));
tokenizer = null;
} public String next(){
while (tokenizer==null || !tokenizer.hasMoreTokens()) {
try {
tokenizer = new StringTokenizer(br.readLine());
}catch(IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
} public int nextInt() {
return Integer.parseInt(next());
}
}
}

【Codeforces 711C】Coloring Trees的更多相关文章

  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 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  3. 【42.07%】【codeforces 558A】Lala Land and Apple Trees

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. 【27.91%】【codeforces 734E】Anton and Tree

    time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  5. 【codeforces 755C】PolandBall and Forest

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  6. 【codeforces 750F】New Year and Finding Roots

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  7. 【22.73%】【codeforces 606D】Lazy Student

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  8. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  9. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

随机推荐

  1. 配置URL

  2. JEECG框架使用Tomcat启动报ClassNotFound

    JEECG框架缺少一个类,名为AnnotationProcessor,包名为:org.apache package org.apache; import java.lang.reflect.Invoc ...

  3. lodop 打印

    使用Lodop打印: 一.在官网下载http://www.lodop.net/download.html 若是安装还是提示未安装,就按转这个 二.准备两个js 三.需要在页面最上面加入 <htm ...

  4. PowerDesigner 的使用教程

    PowerDesigner 的使用这两篇博客挺好,我也是跟着学习,就不再写了: 初步学习: http://www.cnblogs.com/huangcong/archive/2010/06/14/17 ...

  5. 题解报告:hdu 2588 GCD(欧拉函数)

    Description The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written ...

  6. 235 Lowest Common Ancestor of a Binary Search Tree 二叉搜索树的最近公共祖先

    给定一棵二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 详见:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-s ...

  7. Kafka~服务端几个常用的命令

    在Centos上安装和部署完成kafka之后,我们就可以向服务端推消息和消费它了,今天主要聊几个常用的命令,比建立topic,从broken显示所有topics列表,向broken发消息,从broke ...

  8. [ TJOI 2010 ] 打扫房间

    \(\\\) Description 给出一个\(N\times M\) 的网格,一些格子是污点,求是否能用多个封闭的环路覆盖所有不是污点的格点. 封闭的环路覆盖的含义是,每条路径都必须是一个环,且每 ...

  9. BPI-MI1刷Andorid的启动卡之后上网的步骤(以太网&&WIFI)

    BPI-MI1刷Andorid的启动卡之后上网的步骤(以太网&&WIFI) 2017/9/19 16:57 01刷Android的默认启动界面.png 02打开英文模式下的设置Sett ...

  10. Python代码搜索并下载酷狗音乐

    运行环境: Python3.5+Pycharm 实例代码: import requests,re keyword = input("请输入想要听的歌曲:") url = " ...