hdu 5074 Hatsune Miku DP题目
题目传送门http://acm.hdu.edu.cn/showproblem.php?pid=5074
$dp[i][j] =$ 表示数列前$i$个数以$j$结尾的最大分数 $dp[i][j] = -1$ 表示不可能取到。
当$b[i] = -1$ 时:
$$dp[i][j] = \max(dp[i][j],dp[i-1][k] + scores[k][j])$$
$$(1 <= j <= m,dp[i-1][k] != -1)$$
当$b[i] != -1$ 时:
$$dp[i][j] = -1 (j != b[i])$$
$$dp[i][b[i]] = \max(b[i][b[i]],dp[i-1][k] + scores[k][b[i]])$$
$$ (1 <= j <= m,dp[i-1][k] != -1)$$
复杂度为$$O(n \times m^2)$$
鞍山赛区烙下的阴影,当时竟然老想着用dfs来暴力过去,脑洞真是好大,图样图森破,dp能力太差了,回来补题的时候还是不会做,具体方法是参照数一巨巨的,具体的可以看他的博客,然后自己写了一份代码.
/*********************************
Author: jusonalien
Email : jusonalien@qq.com
school: South China Normal University
Origin: HDU 5074
*********************************/
#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
#include <string>
#include <set>
#include <queue>
#include <vector>
using namespace std;
int t,n,m;
int scores[110][110];
int a[110];
int dp[110][110];
void solve(){
if(a[1] != -1)
for(int i = 1;i <= m;++i){
if(i != a[1])
dp[1][i] = -1;
}
for(int i = 2;i <= n;i++){
if(a[i] == -1){
for(int j = 1;j <= m;++j)
for(int k = 1;k <= m;++k)
if(dp[i-1][k] != -1)
dp[i][j] = max(dp[i][j],dp[i-1][k]+scores[k][j]);
}
else{
for(int j = 1;j <= m;++j)
if(dp[i-1][j] != -1)
dp[i][a[i]] = max(dp[i][a[i]],dp[i-1][j]+scores[j][a[i]]);
for(int k = 1;k <= m;++k)
if(k != a[i])
dp[i][k] = -1;
}
}
int ans = 0;
for(int i = 1;i <= m;++i)
ans = max(ans,dp[n][i]);
printf("%d\n",ans);
}
int main(){
//freopen("in.txt","r",stdin);
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
memset(dp,0,sizeof(dp));
for(int i = 1;i <= m;i++)
for(int j = 1;j <= m;j++) scanf("%d",&scores[i][j]);
for(int i = 1;i <= n;i++) scanf("%d",&a[i]);
solve();
}
return 0;
}
/*
2
5 3
83 86 77
15 93 35
86 92 49
3 3 3 1 2
10 5
36 11 68 67 29
82 30 62 23 67
35 29 2 22 58
69 67 93 56 11
42 29 73 21 19
-1 -1 5 -1 4 -1 -1 -1 4 -1
*/
hdu 5074 Hatsune Miku DP题目的更多相关文章
- dp --- 2014 Asia AnShan Regional Contest --- HDU 5074 Hatsune Miku
Hatsune Miku Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5074 Mean: 有m种音符(note),现在要从 ...
- HDU 5074 Hatsune Miku(DP)
Problem Description Hatsune Miku is a popular virtual singer. It is very popular in both Japan and C ...
- hdu - 5074 Hatsune Miku (简单dp)
有m种不同的句子要组成一首n个句子的歌,每首歌都有一个美丽值,美丽值是由相邻的句子种类决定的,给出m*m的矩阵map[i][j]表示第i种句子和第j种句子的最大得分,一首歌的美丽值是由sum(map[ ...
- HDU 5074 Hatsune Miku 2014 Asia AnShan Regional Contest dp(水
简单dp #include <stdio.h> #include <cstring> #include <iostream> #include <map> ...
- HDU 5074 Hatsune Miku(2014鞍山赛区现场赛E题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074 解题报告:给出一个长度为n的序列,例如a1,a2,a3,a4......an,然后这个序列的美丽 ...
- [HDU 5074] Hatsune Miku (动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074 题目大意是给你m个note,n个数,得分是v[a[i]][a[i+1]]的总和,如果说a[i]是 ...
- hdu 5074 Hatsune Miku
http://acm.hdu.edu.cn/showproblem.php?pid=5074 题意:给你一个的矩阵score[i][j],然后给你一个数列,数列中有一些是-1,代表这个数可以换成1~m ...
- HDU 1011 树形背包(DP) Starship Troopers
题目链接: HDU 1011 树形背包(DP) Starship Troopers 题意: 地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...
- hdu 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】(转)
HDU 动态规划(46道题目)倾情奉献~ [只提供思路与状态转移方程] Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包 ...
随机推荐
- 树莓派 -- i2c学习 续(1) DeviceTree Overlay实例化rtc
上文中讨论了通过sysfs来实例化i2c设备 (rtc ds3231) https://blog.csdn.net/feiwatson/article/details/81048616 本文继续看看如 ...
- mysql数据库导出导入
MYSQL的命令行模式设置: 我的电脑->属性->高级系统设置->环境变量->系统变量-> 选择Path,在后面添加“;path\mysql\bin;”其中path为MY ...
- 高阶函数 map,reduce, filter的用法
1. map 用法 def fun_C(x): """求平方""" return x ** 2 result = map(fun_C, my ...
- history.go history.back()
转http://www.mikebai.com/Article/2009-11/757.html <input type=button value=刷新 onclick="window ...
- Numpy第一课
import numpy as np a = np.array([1,2,3]) print(a) # [1 2 3] a2 = np.array([[1, 2], [3, 4]]) print('a ...
- NOI模拟(3.3)螺旋序列(出题人一定是月厨)
Description S也想寻求真正的智慧,然而由于“抑制力”的存在,她必须先解决一系列询问.有一个长度为n的序列a,一个长度为m序列b被称为螺旋序列当且仅当b1=bm且对于1<=i<= ...
- Android OkHttp与物理存储介质缓存:DiskLruCache(2)
Android OkHttp与物理存储介质缓存:DiskLruCache(2) 本文在附录文章8,9的基础之上,把Android OkHttp与DiskLruCache相结合,综合此两项技术,实 ...
- C#高级编程第9版 第一章 .NET体系结构 读后笔记
.NET的CLR把源代码编译为IL,然后又把IL编译为平台专用代码. IL总是即时编译的,这一点的理解上虽然明白.当用户操作C#开发的软件时,应该是操作已经编译好的程序.那么此时安装在客户机上的程序是 ...
- 从零开始写STL-容器-list
从零开始写STL-容器-list List 是STL 中的链表容器,今天我们将通过阅读和实现list源码来解决一下问题: List内部的内存结构是如何实现的? 为什么List的插入复杂度为O(1)? ...
- 什么是单点登录(SSO)
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在我实习之前我就已经在看单点登录的是什么了,但是实习 ...