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),现在要从这m种音符中选出n个来组成一首歌,相邻两个音符之间会有一个评分的方式,即score(i,j),而score(i,j)题目已经给出,现在要你按照题目的规定来选出n个音符来使得最终的分数最高。
analyse:
鞍山赛区第二大水题,很简单的dp。
具体思路:dp[i][j]表示第i个音符选择的是第j种。
那么就很容易得出状态转移方程:dp[i][j]=max(dp[i][j],dp[i+1][j]+v[j][k]).(详见代码)
Time complexity: O(n*m*m)
Source code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | // Memory Time // 1347K 0MS // by : Snarl_jsb // 2014-11-15-21.40 #include<algorithm> #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<vector> #include<queue> #include<stack> #include<map> #include<string> #include<climits> #include<cmath> #define N 1000010 #define LL long long using namespace std; /**< dp[i][j]代表第i个note选择第j种 */ int v[60][60],a[105],dp[105][105]; int main() { ios_base::sync_with_stdio( false ); cin.tie(0); // freopen("C:\\Users\\ASUS\\Desktop\\cin.cpp","r",stdin); // freopen("C:\\Users\\ASUS\\Desktop\\cout.cpp","w",stdout); int t; cin>>t; while (t--) { int n,m; cin>>n>>m; for ( int i=1;i<=m;++i) for ( int j=1;j<=m;++j) cin>>v[i][j]; for ( int i=1;i<=n;++i) cin>>a[i]; memset (dp,0, sizeof dp); for ( int i=n-1;i>=0;--i) /**< 要选出n个数 */ { for ( int j=0;j<=m;++j) /**< 其中每个数都对应着m选法 */ { if (a[i+1]<0) /**< 可以自由选 */ { for ( int k=1;k<=m;++k) dp[i][j]=max(dp[i][j],dp[i+1][k]+v[j][k]); } else /**< 已经固定的 */ { dp[i][j]=v[j][a[i+1]]+dp[i+1][a[i+1]]; } } } cout<<dp[0][0]<<endl; } 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 */ |
作者:北岛知寒
出处:https://www.cnblogs.com/crazyacking/p/4100313.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?