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

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

    Coloring Trees Problem Description: ZS the Coder and Chris the Baboon has arrived at Udayland! They ...

  2. 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 standard i ...

  3. 【CF711C】Coloring Trees(DP)

    题意:给你n个数字,一共有m种,如果某数为0则该数为空,空的地方可以填任意种类数,但每填一个数字都要花费一定的费用, 从头到尾,所有相邻且相同的数字看作一个集合,求使n个数字的集合数为k所需的最小费用 ...

  4. Codeforces Gym101341K:Competitions(DP)

    http://codeforces.com/gym/101341/problem/K 题意:给出n个区间,每个区间有一个l, r, w,代表区间左端点右端点和区间的权值,现在可以选取一些区间,要求选择 ...

  5. CodeForces 711C Coloring Trees (DP)

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

  6. 【Codeforces】CF 9 D How many trees?(dp)

    题目 传送门:QWQ 分析 用$ dp[i][j] $表示用i个节点,有多少深度小于等于j的二叉树. 答案是$ dp[n][n] - dp[n][h-1] $ 转移时枚举左子树的节点数量,就可以知道右 ...

  7. codeforces#1154F. Shovels Shop (dp)

    题目链接: http://codeforces.com/contest/1154/problem/F 题意: 有$n$个物品,$m$条优惠 每个优惠的格式是,买$x_i$个物品,最便宜的$y_i$个物 ...

  8. Codeforces 1051 D.Bicolorings(DP)

    Codeforces 1051 D.Bicolorings 题意:一个2×n的方格纸,用黑白给格子涂色,要求分出k个连通块,求方案数. 思路:用0,1表示黑白,则第i列可以涂00,01,10,11,( ...

  9. Codeforces 1207C Gas Pipeline (dp)

    题目链接:http://codeforces.com/problemset/problem/1207/C 题目大意是给一条道路修管道,相隔一个单位的管道有两个柱子支撑,管道柱子高度可以是1可以是2,道 ...

随机推荐

  1. getsockname和getpeername

    int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);  // 获取与某个套接字关联的本地协议地址 i ...

  2. github注册使用以及体会

    一.个人介绍 我叫冯越,学号是1413042065,班级是网络工程143,兴趣爱好有打羽毛球,素描,读书,个人编程能力一般,行数没有计算过,大一学习C++时,实验题目一些书后的题目,大二学习数据结构时 ...

  3. async 和await

    这个是.NET 4.5的特性,所以要求最低.NET版本为4.5. 看很多朋友还是使用的Thread来使用异步多线程操作,基本上看不见有使用Async.Await进行异步编程的.各有所爱吧,其实都可以. ...

  4. apache rewrite设置 禁止某个文件夹执行php文件

    RewriteRule (data|templates)/(.*).(php)$ – [F]

  5. bash: sqlplus: command not found 解决方法

    在oracle用户下输入:sqlplus 抛出bash: sqlplus: command not found 解决办法: 在root用户下输入如下命令: ln -s $ORACLE_HOME/bin ...

  6. 重点关注之OData with List

    OData是什么 官方解释:The Open Data Protocol (OData) is a data access protocol for the web. OData provides a ...

  7. git常用语法

    git笔记  1.     获取项目(克隆):     Git repository:                       git clone -b develop ssh://git@68. ...

  8. centos 5.5 安装 lnmp

    centos5.5 安装 lnmp,一定要事先选好版本安装,建议自己下载安装. 1.相关文件目录: nginx: /www/nginx/下面mysql: /usr/share/mysql /usr/b ...

  9. C# 定时器事件(设置时间间隔,间歇性执行某一函数,控制台程序)

    定时器事件代码 static void Main(string[] args) { Method(); #region 定时器事件 Timer aTimer = new Timer(); aTimer ...

  10. Adriod—— DVM

    Android 运行环境主要指的虚拟机技术——Dalvik.Android中的所有Java程序都是运行在Dalvik VM上的.Android上的每个程序都有自己的线程,DVM只执行.dex的Dalv ...