有m种不同的句子要组成一首n个句子的歌,每首歌都有一个美丽值,美丽值是由相邻的句子种类决定的,给出m*m的矩阵map[i][j]表示第i种句子和第j种句子的最大得分,一首歌的美丽值是由sum(map[i][i+1],map[i+1][i+2]....)

初始给出n个句子的值,为正就不能改变,为负表示可以替换,输出最大的美丽值.

dp[i][j]表示前i个句子且第i个句子种类为j的最大得分。下面分情况讨论.

if(p[i]>0)

  if(p[i-1]>0)  dp[i][p[i]]=dp[i-1][p[i-1]]+score[p[i-1]][p[i]];

  else if(p[i-1]<0) dp[i][p[i]]=max(dp[i][p[i]],dp[i-1][j]+score[j][p[i]]) (j>=0&&j<=m)

else if(p[i]<0)

  if(p[i-1]>0) dp[i][j]=max(dp[i][j],dp[i-1][p[i-1]]+score[p[i-1]][j]) (j>=0&&j<=m)

  else if(p[i-1]<0) dp[i][j]=max(dp[i][j],dp[i-1][k]+score[j][k])(j>=0&&j<=m,k>=0&&k<=m)

 #include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <cstring>
#include <string>
#include <algorithm>
#include <string>
#include <set>
#include <functional>
#include <numeric>
#include <sstream>
#include <stack>
//#include <map>
#include <queue>
#include <deque>
//#pragma comment(linker, "/STACK:102400000,102400000")
#define CL(arr, val) memset(arr, val, sizeof(arr)) #define ll long long
#define INF 0x7f7f7f7f
#define lc l,m,rt<<1
#define rc m + 1,r,rt<<1|1
#define pi acos(-1.0) #define L(x) (x) << 1
#define R(x) (x) << 1 | 1
#define MID(l, r) (l + r) >> 1
#define Min(x, y) (x) < (y) ? (x) : (y)
#define Max(x, y) (x) < (y) ? (y) : (x)
#define E(x) (1 << (x))
#define iabs(x) (x) < 0 ? -(x) : (x)
#define OUT(x) printf("%I64d\n", x)
#define lowbit(x) (x)&(-x)
#define Read() freopen("a.txt", "r", stdin)
#define Write() freopen("b.txt", "w", stdout);
#define maxn 110
#define maxv 5010
#define mod 1000000000
using namespace std;
int main()
{
//Read();
int t,n,m;
int score[][],p[],dp[][];
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
for(int j=;j<=m;j++) scanf("%d",&score[i][j]);
for(int i=;i<=n;i++) scanf("%d",&p[i]);
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)
{
if(p[i]>)
{
if(p[i-]>)
{
dp[i][p[i]]=dp[i-][p[i-]]+score[p[i-]][p[i]];
}
else
{
for(int j=;j<=m;j++)
dp[i][p[i]]=max(dp[i][p[i]],dp[i-][j]+score[j][p[i]]);
}
}
else
{
if(p[i-]>)
{
for(int j=;j<=m;j++)
dp[i][j]=max(dp[i][j],dp[i-][p[i-]]+score[p[i-]][j]);
}
else
{
for(int j=;j<=m;j++)
for(int k=;k<=m;k++)
dp[i][j]=max(dp[i][j],dp[i-][k]+score[k][j]);
}
}
//printf("%d\n",dp[i][j]);
}
int ans=;
for(int i=;i<=m;i++)
ans=max(ans,dp[n][i]);
printf("%d\n",ans);
}
return ;
}

hdu - 5074 Hatsune Miku (简单dp)的更多相关文章

  1. HDU 5074 Hatsune Miku(DP)

    Problem Description Hatsune Miku is a popular virtual singer. It is very popular in both Japan and C ...

  2. 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),现在要从 ...

  3. hdu 5074 Hatsune Miku DP题目

    题目传送门http://acm.hdu.edu.cn/showproblem.php?pid=5074 $dp[i][j] =$ 表示数列前$i$个数以$j$结尾的最大分数 $dp[i][j] = - ...

  4. HDU 5074 Hatsune Miku 2014 Asia AnShan Regional Contest dp(水

    简单dp #include <stdio.h> #include <cstring> #include <iostream> #include <map> ...

  5. HDU 5074 Hatsune Miku(2014鞍山赛区现场赛E题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074 解题报告:给出一个长度为n的序列,例如a1,a2,a3,a4......an,然后这个序列的美丽 ...

  6. [HDU 5074] Hatsune Miku (动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074 题目大意是给你m个note,n个数,得分是v[a[i]][a[i+1]]的总和,如果说a[i]是 ...

  7. hdu 5074 Hatsune Miku

    http://acm.hdu.edu.cn/showproblem.php?pid=5074 题意:给你一个的矩阵score[i][j],然后给你一个数列,数列中有一些是-1,代表这个数可以换成1~m ...

  8. hdu 2084 数塔 (简单dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=2084 数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory L ...

  9. HDU 2084 数塔(简单DP入门)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

随机推荐

  1. 【HEVC帧间预测论文】P1.8 Complexity Control of High Efficiency Video Encoders for Power-Constrained Devices

    参考:Complexity Control of High Efficiency Video Encoders for Power-Constrained Devices <HEVC标准介绍.H ...

  2. 从源码中无法看出函数所在的js脚本的解决方法

    通过设置断点调试使js脚本自动出现

  3. 洛谷 P1011 车站

    题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起( ...

  4. QT_2

    1.默认生成代码的含义(.pro)

  5. JavaEE-07 过滤器和监听器

    学习要点 过滤器 监听器 过滤器Filter 过滤器的概念 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应. 在请求到达Servlet/JSP之前,过滤器截获请求. 在响 ...

  6. loj6063 Shadow

    题目描述 题解: 显然凸多面体投下来一定是个凸多边形. 对于$30$分,直接投到$x-y$平面上即可. 对于$100$分,考虑搞出平面的一般式方程$ax+by+cz+d=0$. 给出平面上三个点$A, ...

  7. kvm虚拟机的克隆以及快照

    克隆(常见有3种方法) 1 直接克隆(克隆虚拟机使用自己的磁盘) virt-clone -o vm-01 -n vm-02 -f /kvm/os/vm-02.qcow2 virsh start vm- ...

  8. 南邮CTF--SQL注入题

    南邮CTF--SQL注入题 题目:GBK SQL injection 解析: 1.判断注入点:加入单引号发现被反斜杠转移掉了,换一个,看清题目,GBK,接下来利用宽字节进行注入 2.使用'%df' ' ...

  9. Django 1.8.11 REST风格路由

    # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community b ...

  10. noi.ac NOIP2018 全国热身赛 第四场 T2 sort

    [题解] 跟51nod 1105差不多. 二分答案求出第L个数和第R个数,check的时候再套一个二分或者用two pointers. 最后枚举ai在b里面二分,找到所有范围内的数,排序后输出. 注意 ...