codeforces 711C Coloring Trees(DP)
题目链接: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)的更多相关文章
- 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 ...
- 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 ...
- 【CF711C】Coloring Trees(DP)
题意:给你n个数字,一共有m种,如果某数为0则该数为空,空的地方可以填任意种类数,但每填一个数字都要花费一定的费用, 从头到尾,所有相邻且相同的数字看作一个集合,求使n个数字的集合数为k所需的最小费用 ...
- Codeforces Gym101341K:Competitions(DP)
http://codeforces.com/gym/101341/problem/K 题意:给出n个区间,每个区间有一个l, r, w,代表区间左端点右端点和区间的权值,现在可以选取一些区间,要求选择 ...
- CodeForces 711C Coloring Trees (DP)
题意:给定n棵树,其中有一些已经涂了颜色,然后让你把没有涂色的树涂色使得所有的树能够恰好分成k组,让你求最少的花费是多少. 析:这是一个DP题,dp[i][j][k]表示第 i 棵树涂第 j 种颜色恰 ...
- 【Codeforces】CF 9 D How many trees?(dp)
题目 传送门:QWQ 分析 用$ dp[i][j] $表示用i个节点,有多少深度小于等于j的二叉树. 答案是$ dp[n][n] - dp[n][h-1] $ 转移时枚举左子树的节点数量,就可以知道右 ...
- codeforces#1154F. Shovels Shop (dp)
题目链接: http://codeforces.com/contest/1154/problem/F 题意: 有$n$个物品,$m$条优惠 每个优惠的格式是,买$x_i$个物品,最便宜的$y_i$个物 ...
- Codeforces 1051 D.Bicolorings(DP)
Codeforces 1051 D.Bicolorings 题意:一个2×n的方格纸,用黑白给格子涂色,要求分出k个连通块,求方案数. 思路:用0,1表示黑白,则第i列可以涂00,01,10,11,( ...
- Codeforces 1207C Gas Pipeline (dp)
题目链接:http://codeforces.com/problemset/problem/1207/C 题目大意是给一条道路修管道,相隔一个单位的管道有两个柱子支撑,管道柱子高度可以是1可以是2,道 ...
随机推荐
- 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 ...
- ARM流水线关键技术分析与代码优化
引 言 流水线技术通 过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一.ARM7处理器核使用了典型三级流 水线的冯·诺伊曼结构,AR ...
- thinkjs——修改where默认条件为or
写之前,得先反思一下:总以为大神同事的高冷是一种与大家格格不入的节奏,可是当自己遇到的问题难以解决的时候,大神同事一下子就让问题迎刃而解,于是,满眼的敬佩之感:一定努力当一个像大神同事一样的progr ...
- OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念
先看下 http://www.cnblogs.com/bonelee/p/6236962.html 这里对于环形数据库的介绍,便于理解归档这个操作! 转自:http://blog.sina.com.c ...
- Html5编辑工具
如果你是一名Web开发人员,当你需要开发一个独特的网站时,你就会知道文本编辑器的重要性.小编为大家整理了8款非常前沿的HTML5文本编辑器,简化开发流程,喜欢就转走吧! Mercury Editor ...
- 尽量少用Include
当我们使用EF写查询,尤其是关联到多个表的时候,我们一般习惯使用include关联,但是过多地使用include会带来性能问题.作为替代方法,可以使用多个toList来代替. 改造前:
- ASP.NET MVC统一异常处理
前言: 今早看了篇文章:求知成瘾,却无作品 的思考:很有感触,发现原来自己也是这样,对每样东西都抱有很大的兴趣或者希望自己去学,一年后发现原来自己什么都是皮毛什么都不精!最终发现真正的大牛都是在某一个 ...
- 搜索功能demo
代码如下: <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edg ...
- 小记:使用SharedPreferences存储来设置程序第一次进入欢迎界面,以后不会再进入欢迎界面。
SharedPreferences mSharedPreferences = this.getSharedPreferences(NAME, this.MODE_PRIVATE); boolean f ...
- 常州培训 day4 解题报告
第一题:(简单的模拟题) 给出一个N位二进制数,有‘+’, ‘-’, ‘*’, ‘/’ 操作,分别表示加1,减1,乘2,除以2,给出M个操作,求出M个操作后的二进制数.N,M<=5000000; ...