hdu 5074 Hatsune Miku(dp)
来源:互联网 发布:明星为什么要吸毒 知乎 编辑:程序博客网 时间:2024/05/16 15:00
题目连接:hdu 5074 Hatsune Miku
题目大意:给定给一个M∗M的矩阵,以及一个长度为N的数组,每次取G[a[i]][a[i+1]]的值,如果a[i]为-1则可以是任何数,问说最大值。
解题思路:dp[i][j]表示第i个数为j的时候的最优解,如果a[i]不为-1,那么j = a[i],否则枚举j。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 105;const int INF = 0x3f3f3f3f;int N, M, g[maxn][maxn], p[maxn], dp[maxn][maxn];void init () { scanf("%d%d", &N, &M); memset(g, 0, sizeof(g)); for (int i = 1; i <= M; i++) { for (int j = 1; j <= M; j++) scanf("%d", &g[i][j]); } for (int i = 1; i <= N; i++) scanf("%d", &p[i]);}int solve () { memset(dp, -INF, sizeof(dp)); if (p[1] == -1) memset(dp[1], 0, sizeof(dp[1])); else dp[1][p[1]] = 0; for (int i = 2; i <= N; i++) { if (p[i] == -1) { for (int x = 1; x <= M; x++) for (int y = 1; y <= M; y++) dp[i][x] = max(dp[i][x], dp[i-1][y] + g[y][x]); } else { int x = p[i]; for (int y = 1; y <= M; y++) dp[i][x] = max(dp[i][x], dp[i-1][y] + g[y][x]); } } int ret = 0; for (int i = 1; i <= M; i++) ret = max(dp[N][i], ret); return ret;}int main () { int cas; scanf("%d", &cas); while (cas--) { init(); printf("%d\n", solve()); }}
0 0
- HDU 5074 Hatsune Miku(DP)
- hdu 5074 Hatsune Miku(dp)
- HDU 5074 Hatsune Miku DP
- hdu 5074 Hatsune Miku【DP】
- hdu Hatsune Miku(DP)
- HDU 5074-Hatsune Miku(DP)
- HDU 5074 Hatsune Miku(dp)
- hdu 5074 Hatsune Miku(dp)
- HDU 5074 Hatsune Miku(简单二维dp)
- HDU 5074 Hatsune Miku (线性dp)
- HDU 5074 Hatsune Miku 暴力dp
- HDU 5074 Hatsune Miku (dp)
- HDU 5074 Hatsune Miku(暴力+DP)
- HDU 5074 Hatsune Miku(DP)
- hdu 5074 Hatsune Miku 简单dp
- HDU 5074 Hatsune Miku(DP)
- HDU 5074 Hatsune Miku 【dp思维】
- hdu 5074 Hatsune Miku
- Redis源码分析(十二)——列表类型t_list
- input与raw_input的区别
- 立此存照(14)[C++]c_str返回const char*的原因
- iOS中的堆(heap)和栈(stack)的理解
- 第9周项目6-穷举法解决组合问题之三色球问题
- hdu 5074 Hatsune Miku(dp)
- Android程序Crash时的异常上报
- slf4j将日志写到单独的文件
- 浅析深究什么是中间件
- Java多线程和并发编程实践的学习心得----基础篇
- 正则表达式RE的两种调用
- 颜料墨水和染料墨水的区别
- 黑马程序员————java基础语法课程学习回顾
- Android检查权限