cf#369-C. Coloring Trees-三维dp

原创 2016年08月30日 18:25:26

http://codeforces.com/contest/711/problem/C


题意很简单:

有m种颜色

给n棵树,每棵树最后有一个颜色x,或者无颜色,用0表示。

要求染成k个子区间,这些子区间是这样划分的,  连续一段颜色一样的树算做一个子区间,不同颜色的数算做不同子区间,样例说的很清楚了


给n,m,k;要求最后染成k个子区间

接下来给一个n*m的矩阵,表示第n棵树染色颜色m的花费。

nmk不超过100


dp[i][j][k]表示 前i棵树染了j个子区间 ,最后一个树是k颜色

转移很好转移  

枚举第i棵树的颜色,如果已经有颜色了,则   如果前一棵树颜色和i一样,则

                        dp[i][j][aa[i]]=min(dp[i][j][aa[i]],dp[i-1][j][x]);
否则
                        dp[i][j][aa[i]]=min(dp[i][j][aa[i]],dp[i-1][j-1][x]);


如果无颜色,则枚举 给第i棵树涂的颜色,同样按上面的思路去转移。

最坏复杂度n*m*k*k

sb题  m和k写反了找半天错误。。GGGG还是太菜了

#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
using namespace std;

const double pi=acos(-1.0);
double eps=0.000001;
typedef long long  ll;

ll mp[105][105];
ll aa[105];
ll dp[105][105][105];
int  main()
{
    ll n,m,k;
    cin>>n>>m>>k;
    for (int i=1; i<=n; i++)
        scanf("%lld",&aa[i]);

    for (ll i=1; i<=n; i++)
        for (ll j=1; j<=m; j++)
            scanf("%lld",&mp[i][j]);

    for (ll i=0; i<=100; i++)
        for (ll j=0; j<=100; j++)
            for (ll x=0; x<=100; x++)
                dp[i][j][x]=1e16;


    if (aa[1])
        dp[1][1][aa[1]]=0;
    else
    {
        for (int i=1; i<=m; i++)
            dp[1][1][i]=mp[1][i];
    }
    for (ll i=2; i<=n; i++)
    {
        for (ll j=1; j<=i; j++)
        {
            if (aa[i])
            {
                for (ll x=1; x<=m; x++)
                {
                    if (x==aa[i])
                        dp[i][j][aa[i]]=min(dp[i][j][aa[i]],dp[i-1][j][x]);
                    else
                        dp[i][j][aa[i]]=min(dp[i][j][aa[i]],dp[i-1][j-1][x]);
                }
                continue;
            }
            for (ll x=1; x<=m; x++)     //itself
            {
                for (ll y=1; y<=m; y++)
                {
                    if (x==y)
                        dp[i][j][x]=min(dp[i][j][x],dp[i-1][j][y]+mp[i][x]);
                    else
                        dp[i][j][x]=min(dp[i][j][x],dp[i-1][j-1][y]+mp[i][x]);
                }
            }
        }
    }
    ll ans=1e16;
    for (int i=1; i<=m; i++)
        ans=min(ans,dp[n][k][i]);
    if (ans==1e16)
        printf("-1\n");
    else
        printf("%lld\n",ans);
    return 0;

}










版权声明:本文为博主原创文章,未经博主允许不得转载。

Coloring Trees (三维DP)

B题没有考虑到除了0点以外,原来就不符合的情况,又掉分了….. 题目 题意: n颗树,每棵树可以涂m种颜色,把树分成k组,连续相同颜色的树为合并为一组  给出了n颗树的涂色情况,当涂色...
  • justljf
  • justljf
  • 2016年08月30日 15:48
  • 115

CodeForces - 711C Coloring Trees 三维DP

题目大意输入nn,mm,kk,n表示有多少棵树,m表示有多少中颜色可以给树添加,k表示完美树的个数, 下面的n行表示给第ii棵树染色jj需要的花费,问把树染成k个完美树需要的最小花费。 第二行0表...
  • woshinannan741
  • woshinannan741
  • 2017年03月11日 21:41
  • 200

Visual Assist的Syntax Coloring功能失效的解决方法

本文由Markdown语法编辑器编辑完成。 问题提出: 今天在重装完Visual Studio 2012, 并且安装了番茄出品的软件助手 Whole.Tomato.Visual.Assist.X后。...
  • inter_peng
  • inter_peng
  • 2016年08月15日 18:55
  • 529

关于“缓存着色(cache coloring, page coloring)”技术的相关资料介绍

关于缓存着色(cache coloring)的相关资料
  • qianlong4526888
  • qianlong4526888
  • 2014年01月08日 17:22
  • 3432

【HDU1693】Eat the Trees-插头DP

【HDU1693】Eat the Trees-插头DP
  • Maxwei_wzj
  • Maxwei_wzj
  • 2017年03月26日 17:06
  • 188

高端CPU Cache Page Coloring

浅谈高端CPU Cache Page-Coloring(1)浅谈高端CPU Cache Page-Coloring(2)浅谈高端CPU Cache Page-Coloring(3)浅谈高端CPU Ca...
  • pizi0475
  • pizi0475
  • 2014年01月02日 21:04
  • 2408

整数划分之四 【区间dp】讲解于思考方法

一个老生长谈的问题 给出两个整数 n , m ,要求在 n 中加入m - 1 个乘号,将n分成m段,求出这m段的最大乘积 区间dp: 思路:先求出n从 i~j数位的 值  分析 ...
  • u012349696
  • u012349696
  • 2015年04月23日 15:38
  • 602

Coloring Trees(cf)(dp)

Coloring Trees(cf)(dp)
  • Ema1997
  • Ema1997
  • 2016年09月07日 16:29
  • 128

Codeforces Round #369 (Div. 2) C. Coloring Trees 三维dp

C. Coloring Trees time limit per test 2 seconds memory limit per test 256 megabytes input...
  • July_ing
  • July_ing
  • 2016年09月08日 15:26
  • 290

Codeforces Round #369 (Div. 2) -- C. Coloring Trees (三维DP)

大体题意: 给你n 个树,你要给这些树染色,  标号是0 表示这棵树还没有染色,标号不是0 表示这棵树已经染色 不需要再染,这片树的美丽程度是  连续相同颜色的数目! 告诉你指定美丽程度K,和  最多...
  • aozil_yang
  • aozil_yang
  • 2016年09月02日 23:32
  • 344
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cf#369-C. Coloring Trees-三维dp
举报原因:
原因补充:

(最多只允许输入30个字)