三维dp
https://cn.vjudge.net/contest/245857#problem/C
代码:
#include<iostream>
#include<string>
#include<queue>
#include<cmath>
#include<stack>
#include<vector>
#include<map>
#include<algorithm>
#include<stdio.h>
#include<cstring>
using namespace std;
# define ll long long
const ll LL_INF=0x3f3f3f3f3f3f3f3f;
# define maxn 100+10
ll a[maxn][maxn];
ll dp[maxn][maxn][maxn];
ll tr[maxn];
void init()
{
memset(a,LL_INF,sizeof(a));
memset(dp,LL_INF,sizeof(dp));
memset(tr,LL_INF,sizeof(tr));
}
int main()
{
ll n,m,k;
while(cin>>n>>m>>k)//n代表树的个数,m代表的是颜料的种类,k代表的是需要划分成多少段
{
init();
for(int i=1; i<=m; i++)
{
dp[0][0][i]=0;
}
for(int i=1; i<=n; i++)
{
cin>>tr[i];//记录树的原始状态
// if(tr[i]==0)flag=1;
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
cin>>a[i][j];
if(tr[i])a[i][tr[i]]=0;
}
}
for(int i=1; i<=n; i++)//dp【i】【j】【k】,i代表第几棵树,j代表当前树是划分区间的第几段,w代表的是当前这一段用什么颜料
{
for(int j=1; j<=k&&j<=i; j++)
{
for(int w=1; w<=m; w++)
{
if(tr[i]&&tr[i]!=w)continue;
ll minn=LL_INF;
for(int l=1; l<=m; l++)
{
if(l==w)continue;
minn=min(minn,dp[i-1][j-1][l]);
}
if(i>=2)
dp[i][j][w]=min(dp[i-1][j][w],minn)+a[i][w];
else if(i==1)dp[i][j][w]=a[i][w];
// cout<<dp[i][j][w]<<endl;
}
}
}
// cout<<y<<endl;{
ll minn=LL_INF;
for(int i=1; i<=m; i++)
{
// cout<<dp[n][k][i]<<endl;
minn=min(minn,dp[n][k][i]);
}
if(minn==LL_INF)cout<<-1<<endl;
else
cout<<minn<<endl;
// }
}
return 0;
}
三维dp的更多相关文章
- 三维dp&codeforce 369_2_C
三维dp&codeforce 369_2_C 标签: dp codeforce 369_2_C 题意: 一排树,初始的时候有的有颜色,有的没有颜色,现在给没有颜色的树染色,给出n课树,用m种燃 ...
- P1006 传纸条(二维、三维dp)
P1006 传纸条 输入输出样例 输入 #1 复制 3 3 0 3 9 2 8 5 5 7 0 输出 #1 复制 34 说明/提示 [限制] 对于 30% 的数据,1≤m,n≤10: 对于 100% ...
- HDU 5965 三维dp 或 递推
题意:= =中文题 思路一:比赛时队友想的...然后我赛后想了一下想了个2维dp,但是在转移的时候,貌似出了点小问题...吧?然后就按照队友的思路又写了一遍. 定义dp[i][j][k],表示第i列, ...
- UVA 12063 Zeros and Ones(三维dp)
题意:给你n.k,问你有多少个n为二进制的数(无前导零)的0与1一样多,且是k的倍数 题解:对于每个k都计算一次dp,dp[i][j][kk][l]表示i位有j个1模k等于kk且第一位为l(0/1) ...
- UVALive - 2031 Dance Dance Revolution 三维dp
题目大意:有一个胖子在玩跳舞机.刚開始的位置在(0,0).跳舞机有四个方向键,上左下右分别相应1,2,3,4.如今有下面规则 1.假设从0位置移动到随意四个位置,消耗能量2 2.假设从非0位置跳到相邻 ...
- hdu 4826 三维dp
dp的问题除了递推过程的设计之外 还有数据结构的选择以及怎样合理的填充数据 这个的填充是个坑..#include<iostream> #include<cstdio> #inc ...
- codevs1169传纸条 不相交路径取最大,四维转三维DP
这个题一个耿直的思路肯定是先模拟.. 但是我们马上发现这是具有后效性的..也就是一个从(1,1)开始走,一个从(n,m)开始走的话 这样在相同的时间点我们就没法判断两个路径是否是相交的 于是在dp写挂 ...
- Caesar's Legions(三维dp)
Caesar's Legions Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u S ...
- poj 1037 三维dp
A decorative fence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7221 Accepted: 272 ...
随机推荐
- python---面对对象的组合
组合 给一个类的对象封装一个属性,这个属性是另一个类的对象,这样我们在调用这个属性时就指向了另一个类的对象,这样我们就可以调用另一个类的方法. 模拟英雄联盟写一个游戏人物的类# 要求:# (1)创建一 ...
- 14Junit、反射、注解
14Junit.反射.注解 14.1.1 Junit的概述 一般IDE都内置了junit,若需要自行下载jar包,可以访问官网,官网地址如下:http://www.junit.org 1. ...
- [USACO 2010 Open Silver 3.Time Travel]——链表
Description 约翰得到了一台时光机,他可以用这台机器回到过去(但不能到未来),改变他家的牛群.约翰 打算依次进行 N 步操作,每步操作分为三种: • 买入操作以 a 表示,后接一个参数 i, ...
- EF code first 迁移问题
错误 : 支持"Entities"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlin ...
- MT【14】最大最小问题变形
解答: 评:这类最大最小问题有几何方法和代数方法两种解法.
- 洛谷 P3989 [SHOI2013]阶乘字符串 解题报告
P3989 [SHOI2013]阶乘字符串 题目描述 给定一个由前\(n(\le 26)\)个小写字母组成的串\(S(|S|\le 450)\).串\(S\)是阶乘字符串当且仅当前 \(n\) 个小写 ...
- luogu3707 相关分析 (线段树)
把式子展开以后会发现,可以用线段树维护$x,y,x*y,x^2$分别的区间和 然后操作有区间加和区间修改 这个pushdown的时候,如果改和加的标记同时存在,那一定是先改再加,要不然加的标记已经被清 ...
- detectMultiScale 读取冲突的一个解决方法
背景:用的是opencv的HOGDescriptor检测行人,实例化为hog:使用默认的行人检测器: hog.setSVMDetector(cv::HOGDescriptor::getDefaultP ...
- c++ io标准库2
转自:http://www.2cto.com/kf/201110/109445.html 接下来我们来学习一下串流类的基础知识,什么叫串流类? 简单的理解就是能够控制字符串类型对象进行输入输出的类,C ...
- BSGS
北上广深/拔山盖世算法. yaT+b = z mod p p为质数,Hash表存b,枚举a,复杂度p0.5 记得特判y = 0的情况. inline void solve3() { Hash::cle ...