三维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 ...
随机推荐
- 一本通1548【例 2】A Simple Problem with Integers
1548:[例 2]A Simple Problem with Integers 题目描述 这是一道模板题. 给定数列 a[1],a[2],…,a[n],你需要依次进行 q 个操作,操作有两类: 1 ...
- docker --Nexus仓库
Nexus 简介 Nexus 是个仓库管理器,目前主要分2大版本:2.X 和 3.X.2.X 主要支持的格式是Maven.P2.OBR.Yum.3.X主要支持的是Docker.NuGet.npm.Bo ...
- VMware配置Linux中APPache服务器
[软件] VMware SecureCRT [镜像文件] Centos6.8 APPache软件包 [步骤] 1.将所需文件通过SCRT传入到虚拟机中 2.挂载镜像 2.1 将镜像挂载到mn ...
- 看完让你彻底理解 WebSocket 原理,附完整的实战代码(包含前端和后端)
1.前言 最近有同学问我有没有做过在线咨询功能.同时,公司也刚好让我接手一个 IM 项目.所以今天抽时间记录一下最近学习的内容.本文主要剖析了 WebSocket 的原理,以及附上一个完整的聊天室实战 ...
- Wordpress 之删除 RSS 功能 的"文章RSS"、"评论RSS"、"WordPress.org"
一. 去除底部“自豪地采用 WordPress”版权信息: 1.打开主题文件夹:wp-content/themes/twentyeleven/footer.php; 2.找到 这段代码 删除即可: & ...
- javascript history.go(-1) 返回刷新不起作用
js返回刷新两种方式: 方式一:有提示框 <input type="button" onClick="javascript:history.go(-1);loca ...
- [luogu2149][bzoj1880][SDOI2009]Elaxia的路线【拓扑排序+最短路+DP】
题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间 ...
- 【转】Linux系统进程的知识总结,进程与线程之间的纠葛
我们先打个比方,多线程是十字路口多线程是平面交通系统,造价低,但是红绿灯多,老堵车,而多进程是则是立交桥,虽然造价高,上下坡多耗油,但是不堵车.这是一个抽象的概念.相信大家看完会有这种感觉. 进程和线 ...
- html5的data-*属性,我们一起认识下
html5的data-自定义属性出来很久了,我们一起认识一下. 比如如下一个代码,我们怎么取到对应的name,对应的age? 既然data-*自定义属性是它的一个属性,这个时候就可以用getAttri ...
- (JAVA保留小数问题,基础)Probability hdu2131
Probability 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2131 Time Limit: 3000/1000 MS (Java/Others) ...