【CF711C】Coloring Trees(DP)
题意:给你n个数字,一共有m种,如果某数为0则该数为空,空的地方可以填任意种类数,但每填一个数字都要花费一定的费用,
从头到尾,所有相邻且相同的数字看作一个集合,求使n个数字的集合数为k所需的最小费用。
思路:设dp[i,j,k]为前i个连续j段结尾为k的最优值,分类讨论DP即可
var dp:array[0..100,0..100,0..100]of int64;
p:array[1..100,1..100]of int64;
a:array[0..100]of longint;
n,m,k1,i,j,k,x,t,w:longint;
ans:int64;
function min(x,y:int64):int64;
begin
if x<y then exit(x);
exit(y);
end;
begin
//assign(input,'1.in'); reset(input);
// assign(output,'1.out'); rewrite(output);
readln(n,m,k1);
for i:=1 to n do read(a[i]);
for i:=1 to n do
for j:=1 to m do read(p[i,j]);
for i:=1 to n do
if a[i]>0 then
begin
for j:=1 to m do p[i,j]:=1<<60;
p[i,a[i]]:=0;
end;
for i:=0 to n do
for j:=0 to k1 do
for k:=0 to m do dp[i,j,k]:=1<<61;
dp[0,0,0]:=0;
for i:=0 to n-1 do
begin
w:=1; if i=0 then w:=0;
for j:=w to i do
for k:=w to m do
for x:=1 to m do
if x<>k then dp[i+1,j+1,x]:=min(dp[i+1,j+1,x],dp[i,j,k]+p[i+1,x])
else dp[i+1,j,k]:=min(dp[i+1,j,k],dp[i,j,k]+p[i+1,k]);
end;
ans:=1<<60;
for i:=1 to m do ans:=min(ans,dp[n,k1,i]);
if ans<(1<<60) then writeln(ans)
else writeln(-1);
//close(input);
//close(output);
end.
【CF711C】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 ...
- codeforces 711C Coloring Trees(DP)
题目链接:http://codeforces.com/problemset/problem/711/C O(n^4)的复杂度,以为会超时的 思路:dp[i][j][k]表示第i棵数用颜色k涂完后bea ...
- 【ARC064-F】【XSY2575】Rotated Palindromes(DP)(字符串)
Description 然而,由于小C沉迷于制作游戏,他完全忘记了自己作为国家集训队的一员,还有156道作业题等他完成.还有一天作业就要截止了,而他一题还没有做.于是他赶紧挑了一道看起来最简单的题: ...
- 【HDU-6146】Pokémon GO(dp)
百度之星2017复赛1003 HDU-6146 Pokémon GO 题意 两行n列,只能到相邻格子,可以斜着.求遍历的方案数. 题解 dp[i]从一个点出发遍历长度i最后回到这一列的方案数 dp2[ ...
- 【P2401】不等数列(DP)
这个题乍一看就应该是DP,再看一眼数据范围,1000..那就应该是了.然后就向DP的方向想,经过对小数据的计算可以得出,如果我们用f[i][j]来表示前i个数有j个是填了"<" ...
- 【Hihocoder1634】Puzzle Game(DP)
题意:有一个n*m的矩阵,每个矩阵里有一个数字a[i][j].现在要求将其中一个格子的值改为p,使得修改后矩阵的最大子矩阵和最小,求这个最小值 n,m<=150,abs(a[i][j])< ...
- 【Vijos1222】等值拉面(DP)
题意:有N个数对(a[i],b[i]) 每次可以把(x,y)变成(x+a[i],y+b[i])或(x+b[i],x+a[i]),后者称为交换一次 求使abs(x-y)最小时的最小交换次数 n<= ...
- 【Vijos1534】高性能计算机(DP)
题意:有NA个A与NB个B两种任务需要完成,完成一段长度为X的A任务需要时间ta+ka*x*x,B任务类似,连续的同一种任务不能分成两段运行 有P台可以并行运算的计算机,求最快完成所有任务的时间 1≤ ...
随机推荐
- 12_1_Annotation注解
12_1_Annotation注解 1. 什么是注解 Annotation是从JDK5.0开始引入的新技术. Annotation的作用: 不是程序本身,可以对程序作出解释.可以被其他程序(比如,编译 ...
- UICollectionView实现无限轮播
#import "KGNewsController.h"#import "KGNewsCell.h"#import "KGNews.h"#i ...
- OI算法复习
搜集一些算法,赛前背一背有好处的 转自各大网站 前排感谢:hzwer.风了咕凉 前辈...Orz 快速读入: int read() { ,f=;char ch=getchar(); ;ch=getch ...
- CF-629 D - Babaei and Birthday Cake (离散化 + 线段树|树状数组)
求上升子序列的最大和.O(n^2)会暴力,在查询的时候要用线段树维护 因为权值是浮点数,故先离散化一下,设第 i 个位置的权值,从小到大排名为 id.那么dp转移中 \[d[i] = max(d[i] ...
- Java使用Apache的HttpClient组件发送https请求
如果我们直接通过普通的方式对https的链接发送请求,会报一个如下的错误: javax.net.ssl.SSLHandshakeException: sun.security.validator.Va ...
- 【php】php安全问题
使用 —enable-force-cgi-redirect 选项 设置 doc_root 或 user_dir 或 open_basedir PHP运行的用户身份不能为ROOT 数据库字段加密 程序不 ...
- 百度地图和高德地图的API视频教程
学习地址: http://www.houdunren.com/houdunren18_lesson_152?vid=10228 素材地址: https://gitee.com/houdunwang/v ...
- GoF23种设计模式之行为型模式之备忘录模式
一.概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象的外部保存这个状态.以便以后可以将该对象恢复到原先保存的状态. 二.适用性 1.当需要保存一个对象在某个时刻的状态( ...
- 数字pid笔记(1)
针对stm32中可以如下实现: p->IncrementVal = (p->Kp * (p->err - p->err_next)) + (p->Ki * p->e ...
- zoj 4054
#define ll long long ; int t; ll ans,tmp; char s[N]; int main() { scanf("%d",&t); whil ...