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

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

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

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const ll inf=1e15;
  5. int c[105];
  6. int p[105][105];
  7. ll dp[105][105][105];
  8. int main()
  9. {
  10. int n,m,b;
  11. scanf("%d%d%d",&n,&m,&b);
  12. for(int i=1;i<=n;i++)
  13. scanf("%d",&c[i]);
  14. for(int i=1;i<=n;i++)
  15. {
  16. for(int j=1;j<=m;j++)
  17. scanf("%d",&p[i][j]);
  18. }
  19. for(int i=1;i<=n;i++)
  20. {
  21. for(int j=1;j<=b;j++)
  22. {
  23. for(int k=1;k<=m;k++)
  24. dp[i][j][k]=inf;
  25. }
  26. }
  27. for(int i=1;i<=n;i++)
  28. {
  29. if(c[i])
  30. {
  31. for(int j=1;j<=b&&j<=i;j++)
  32. {
  33. int k=c[i];
  34. ll min1=inf,min2=inf;
  35. if(k>1&&j>1)
  36. min1=*min_element(dp[i-1][j-1]+1,dp[i-1][j-1]+k);
  37. if(k<m&&j>1)
  38. min2=*min_element(dp[i-1][j-1]+k+1,dp[i-1][j-1]+m+1);
  39. dp[i][j][k]=min(dp[i-1][j][k],min(min1,min2));
  40. }
  41. }
  42. else
  43. {
  44. for(int j=1;j<=b&&j<=i;j++)
  45. {
  46. for(int k=1;k<=m;k++)
  47. {
  48. ll min1=inf,min2=inf;
  49. if(k>1&&j>1)
  50. min1=*min_element(dp[i-1][j-1]+1,dp[i-1][j-1]+k);
  51. if(k<m&&j>1)
  52. min2=*min_element(dp[i-1][j-1]+k+1,dp[i-1][j-1]+m+1);
  53. dp[i][j][k]=p[i][k]+min(dp[i-1][j][k],min(min1,min2));
  54. }
  55. }
  56. }
  57. }
  58. ll ans=*min_element(dp[n][b]+1,dp[n][b]+m+1);
  59. if(ans<inf)
  60. printf("%I64d\n",ans);
  61. else
  62. printf("-1\n");
  63. return 0;
  64. }

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. hdu----(5023)A Corrupt Mayor's Performance Art(线段树区间更新以及区间查询)

    A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 100000/100 ...

  2. ARM流水线关键技术分析与代码优化

    引 言    流水线技术通 过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一.ARM7处理器核使用了典型三级流 水线的冯·诺伊曼结构,AR ...

  3. thinkjs——修改where默认条件为or

    写之前,得先反思一下:总以为大神同事的高冷是一种与大家格格不入的节奏,可是当自己遇到的问题难以解决的时候,大神同事一下子就让问题迎刃而解,于是,满眼的敬佩之感:一定努力当一个像大神同事一样的progr ...

  4. OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念

    先看下 http://www.cnblogs.com/bonelee/p/6236962.html 这里对于环形数据库的介绍,便于理解归档这个操作! 转自:http://blog.sina.com.c ...

  5. Html5编辑工具

    如果你是一名Web开发人员,当你需要开发一个独特的网站时,你就会知道文本编辑器的重要性.小编为大家整理了8款非常前沿的HTML5文本编辑器,简化开发流程,喜欢就转走吧! Mercury Editor ...

  6. 尽量少用Include

    当我们使用EF写查询,尤其是关联到多个表的时候,我们一般习惯使用include关联,但是过多地使用include会带来性能问题.作为替代方法,可以使用多个toList来代替. 改造前:

  7. ASP.NET MVC统一异常处理

    前言: 今早看了篇文章:求知成瘾,却无作品 的思考:很有感触,发现原来自己也是这样,对每样东西都抱有很大的兴趣或者希望自己去学,一年后发现原来自己什么都是皮毛什么都不精!最终发现真正的大牛都是在某一个 ...

  8. 搜索功能demo

    代码如下: <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edg ...

  9. 小记:使用SharedPreferences存储来设置程序第一次进入欢迎界面,以后不会再进入欢迎界面。

    SharedPreferences mSharedPreferences = this.getSharedPreferences(NAME, this.MODE_PRIVATE); boolean f ...

  10. 常州培训 day4 解题报告

    第一题:(简单的模拟题) 给出一个N位二进制数,有‘+’, ‘-’, ‘*’, ‘/’ 操作,分别表示加1,减1,乘2,除以2,给出M个操作,求出M个操作后的二进制数.N,M<=5000000; ...