[Codeforces Round #369 (Div. 2) C. Coloring Trees] DP
来源:互联网 发布:哔哩哔哩mac版10.9 编辑:程序博客网 时间:2024/05/10 12:17
[Codeforces Round #369 (Div. 2) C. Coloring Trees] DP
题目链接:[Codeforces Round #369 (Div. 2) C. Coloring Trees]
题意描述:给定N棵树,有M种颜料,每个树最初的颜色分别是
解题思路:
用dp[i][j][k]表示前i棵树染色并且最后一个的颜色是j,划分的数段数为k的最小花费。
那么,写出如下递推式:
t表示上一棵树的颜色,负责度:
#include <set>#include <stack>#include <queue>#include <cmath>#include <cstdio>#include <string>#include <cstring>#include <iostream>#include <algorithm>using namespace std;//#pragma comment(linker, "/STACK:1024000000,1024000000")#define FIN freopen("input.txt","r",stdin)#define FOUT freopen("output.txt","w",stdout)#define fst first#define snd second//typedef __int64 LL;typedef long long LL;typedef pair<int, int> PII;const LL INF = 0x3f3f3f3f3f3f3f3f;const int MAXN = 100 + 5;int N, M, K;LL C[MAXN], P[MAXN][MAXN];LL dp[MAXN][MAXN][MAXN];int main() {#ifndef ONLINE_JUDGE FIN;#endif // ONLINE_JUDGE while (~scanf ("%d %d %d", &N, &M, &K) ) { for (int i = 1; i <= N; i++) { scanf ("%I64d", &C[i]); } for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { scanf ("%I64d", &P[i][j]); } } memset (dp, 0x3f, sizeof (dp) ); if (C[1] == 0) { for (int j = 1; j <= M; j++) { dp[1][j][1] = P[1][j]; } } else { dp[1][C[1]][1] = 0; } for (int i = 2; i <= N; i++) { if (C[i]) { int j = C[i]; for (int k = 1; k <= K; k++) { for (int t = 1; t <= M; t++) { if (j == t) dp[i][j][k] = min (dp[i][j][k], dp[i - 1][t][k]); else dp[i][j][k] = min (dp[i][j][k], dp[i - 1][t][k - 1]); } } } else { for (int j = 1; j <= M; j++) { for (int k = 1; k <= K; k++) { if (C[i - 1]) { int t = C[i - 1]; if (t == j) dp[i][j][k] = min (dp[i][j][k], dp[i - 1][t][k] + P[i][j]); else dp[i][j][k] = min (dp[i][j][k], dp[i - 1][t][k - 1] + P[i][j]); } else { for (int t = 1; t <= M; t++) { if (t == j) dp[i][j][k] = min (dp[i][j][k], dp[i - 1][t][k] + P[i][j]); else dp[i][j][k] = min (dp[i][j][k], dp[i - 1][t][k - 1] + P[i][j]); } } } } } } LL ans = INF; for (int j = 1; j <= M; j++) { ans = min (ans, dp[N][j][K]); } if (ans == INF) ans = -1; printf ("%I64d\n", ans); } return 0;}
0 0
- [Codeforces Round #369 (Div. 2) C. Coloring Trees] DP
- Codeforces Round #369 (Div. 2) C.Coloring Trees (基础DP)
- codeforces Round #369 (Div. 2) C. Coloring Trees (三维DP)
- Codeforces Round #369 (Div. 2) C. Coloring Trees 三维dp
- 【Codeforces Round #369 (Div. 2)】Codeforces 711C Coloring Trees
- Codeforces Round #369 (Div. 2) [C] Coloring Trees
- Codeforces Round #369 (Div. 2) C. Coloring Trees
- Codeforces Round #369 (Div. 2) C. Coloring Trees
- Codeforces Round #369 (Div. 2)-C. Coloring Trees
- Codeforces Round #369 (Div. 2) [C] Coloring Trees
- Codeforces Round #369 (Div. 2)C. Coloring Trees
- Codeforces Round #369 (Div. 2)C. Coloring Trees
- Codeforces Round #369 (Div. 2) C. Coloring Trees 动态规划
- DP方程——Coloring Trees ( Codeforces Round #369 (Div. 2) C )
- Codeforces Round #369 (Div. 2) -- C. Coloring Trees (三维DP)
- Codeforces Round #369 (Div. 2) C. Coloring Trees 数位dp,好题
- Codeforces Round #369 (Div. 2) C. Coloring Trees —— DP
- Codeforces #369(Div.2) C.Coloring Trees【Dp】
- 电冰箱,为价格插入“,”
- openssl https openssl 证书生成
- 1447 取出整数的一部分
- Python模块之shelve
- android碎片知识点
- [Codeforces Round #369 (Div. 2) C. Coloring Trees] DP
- 11. Container With Most Water
- oracle常见错误
- HDOJ 1176 免费馅饼(完全背包)
- 3.21(双向栈)
- mysql 获取当前日期及格式化
- H264编码原理以及I,P,B帧
- ThinkPHP如何使用QQ登录?
- javascript获取节点