codeforces 711C Coloring Trees(DP)

原创 2016年08月30日 12:15:18

题目链接:http://codeforces.com/problemset/problem/711/C

O(n^4)的复杂度,以为会超时的

思路:dp[i][j][k]表示第i棵数用颜色k涂完后beauty为j

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf=1e15;
int c[105];
int p[105][105];
ll dp[105][105][105];
int main()
{
    int n,m,b;
    scanf("%d%d%d",&n,&m,&b);
    for(int i=1;i<=n;i++)
        scanf("%d",&c[i]);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            scanf("%d",&p[i][j]);
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=b;j++)
        {
            for(int k=1;k<=m;k++)
                dp[i][j][k]=inf;
        }
    }
    for(int i=1;i<=n;i++)
    {
        if(c[i])
        {
            for(int j=1;j<=b&&j<=i;j++)
            {
                int k=c[i];
                ll min1=inf,min2=inf;
                if(k>1&&j>1)
                    min1=*min_element(dp[i-1][j-1]+1,dp[i-1][j-1]+k);
                if(k<m&&j>1)
                    min2=*min_element(dp[i-1][j-1]+k+1,dp[i-1][j-1]+m+1);
                dp[i][j][k]=min(dp[i-1][j][k],min(min1,min2));
            }
        }
        else
        {
            for(int j=1;j<=b&&j<=i;j++)
            {
                for(int k=1;k<=m;k++)
                {
                    ll min1=inf,min2=inf;
                    if(k>1&&j>1)
                        min1=*min_element(dp[i-1][j-1]+1,dp[i-1][j-1]+k);
                    if(k<m&&j>1)
                        min2=*min_element(dp[i-1][j-1]+k+1,dp[i-1][j-1]+m+1);
                    dp[i][j][k]=p[i][k]+min(dp[i-1][j][k],min(min1,min2));
                }
            }
        }
    }
    ll ans=*min_element(dp[n][b]+1,dp[n][b]+m+1);
    if(ans<inf)
        printf("%I64d\n",ans);
    else
        printf("-1\n");
    return 0;
}


版权声明:

相关文章推荐

Codeforces 711c 简单dp

题目:http://codeforces.com/problemset/problem/711/C题意: 有n棵树,m(1-m)种颜色,要求划分成k组,每组是连续的同一种颜色的树。 刚开始树...

【动态规划】Codeforces 711C Coloring Trees

题目链接:   http://codeforces.com/problemset/problem/711/C 题目大意:   给N棵树,M种颜色,已经有颜色的不能涂色,没颜色为0...

CodeForces 711C.Coloring Trees【DP】

题目链接http://codeforces.com/problemset/problem/711/C思路设dp[i][x][l]代表涂完前i棵树,美丽值为x,最后一棵树的颜色为l的最小代价。 那么...

Codeforces711C 【DP】

题意: 有n个点,m种颜色,你要给n个点上没有颜色的点染色。每个点i对应染的颜色j有一个颜料消耗,p[i][j]是点i染成j颜色的花费,你必须保证有k段颜色的点,输出最少花费多少颜料。 还有一个就...

CodeForces 711C Coloring Trees(DP)

传送门:http://codeforces.com/problemset/problem/711/C题目大意: 有若干个点,每个点开始有一个颜色值,如果有颜色,则用1~m表示涂有的颜色,如果没颜色用...

Codeforces Problem 711C Coloring Trees(DP)

Codeforces Problem 711C Coloring Trees(DP)

CodeForces - 711C Coloring Trees 三维DP

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

Codeforces711C-Coloring Trees(dp)

题目链接http://codeforces.com/contest/711/problem/C思路dp,状态还是比较好表示 **状态表示**d[i][j][k],前i个树都已经染色, 第i棵树颜色为...
  • Lzedo
  • Lzedo
  • 2016-09-23 20:56
  • 96

【Codeforces Round #369 (Div. 2)】Codeforces 711C Coloring Trees

动态规划

Codeforces #369(Div.2) C.Coloring Trees【Dp】

Coloring Trees Description ZS the Coder and Chris the Baboon has arrived at Udayland! ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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