题意:有n首歌(劲歌金曲除外),每首歌都有一个时间,然后给定一个时间t,问在给定的时间内最多能唱的歌曲数目以及能唱的最长时间,如果已经到了时间限制t,但是还没唱完,那么可以唱完这首歌。

分析:每首歌最多180秒,而劲歌金曲有678s,首先得保证唱的歌曲数目最多,之后保证时间更长。留1s唱劲歌金曲就行了。然后就是个01背包,只是规划时根据题目要求来就行了。这个题目中t给定的范围很大,看似无法进行DP,但是这个分析题目便可以知道总共唱的时间不会超过180*n+678,所以不存在问题。

思路:
题目有两个需要考虑的,第一个是要尽量多的歌曲数量,第二个是要时间更持久,并且是在数量多的基础上更久,这就决定了这个题需要两个变量,而且数量是作为第一考虑条件,时间作为第二考虑条件,大体上看是01背包。

代码:


#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 1024
int num[MAX][MAX];//歌曲数量
int t[MAX][MAX];//所用时间
int main(void) {int n,time;while (cin >> n >> time&&n&&t) {int *v = new int[n+1];for (int i = 1; i <= n; i++) {cin >> v[i];}for (int i = 1; i <= n; i++) {for (int j = 1; j <= time - 1; j++) {num[i][j] = (i == 1 ? 0 : num[i - 1][j]);t[i][j] = (i == 1 ? 0 : t[i - 1][j]);if (j >= v[i])if (num[i][j] == num[i - 1][j - v[i]] + 1) {//考虑歌曲数量相等时要更长时间的num[i][j] = num[i - 1][j - v[i]] + 1;t[i][j] = max(t[i][j], t[i - 1][j - v[i]]+v[i]);}else if (num[i][j] < num[i - 1][j - v[i]] + 1) {//取歌曲数量大的,毕竟以数量为第一考虑num[i][j] = num[i - 1][j - v[i]] + 1;t[i][j] = t[i - 1][j - v[i]] + v[i];}}}cout << num[n][time - 1] + 1 << " " << t[n][time - 1] + 678 << endl;}system("pause");return 0;
}

下面是LCS最长公共子序列问题,思路就不写了,只给出状态方程:
if S1[i]!=S2[j] : d(i,j)=max{d(i-1,j),d(i,j-1)}
else d(i,j)=d(i-1,j-1)+1;
代码:

#include <iostream>
#include <string>
#include<algorithm>
#include <vector>
using namespace std;
int lcs_len(string s1, string s2) {int len1 = s1.size(), len2 = s2.size();if (len1 == 0 || len2 == 0)return 0;//定义二维数组dp[i][j]  代表串1从0~i这段与串2从0~j这段的公共子串的最大值//赋初值dp[0~len1][0]=0   dp[0][0~len2]=0vector<vector<int>> dp(len1 + 1, vector<int>(len2 + 1, 0));for (int i = 1; i <= len1; i++) {for (int j = 1; j <= len2; j++) {if (s1[i - 1] == s2[j - 1]) {//若相等则上层值+1dp[i][j] = dp[i - 1][j - 1] + 1;}else {//若不相等则等于交错值中的最大值dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}}}int m = (len1 > len2 ? len1 : len2);for (int i = 1; i <= m; i++)for (int j = 1; j <= m; j++)j == m ? cout << dp[i-1][j-1] << endl : cout << dp[i-1][j-1] << " ";return dp[len1][len2];
}int main() {string s1, s2;while (cin >> s1 >> s2) {cout << s1 << "  " << s2 << "的最长公共子串长度为" << lcs_len(s1, s2) << endl;}return 0;
}

如果要求输出序列,可以找表中的每一个值得左上角,串起来就是结果。

uva12563劲歌金曲与LCS相关推荐

  1. UVa-12563 劲歌金曲

    题目 https://vjudge.net/problem/Uva-12563 给出n首歌和KTV的剩余时间T,因为KTV不会在时间到的时候立刻把歌切掉,而是会等它放完.而<劲歌金曲>长达 ...

  2. UVA12563劲歌金曲

    描述: 略 #include<iostream> #include<cstring> #include<algorithm> using namespace std ...

  3. 第五十题 UVA12563 劲歌金曲 Jin Ge Jin Qu hao

    今天是小年~~~ 现在是小年夜的 22:41:35 刚才做完了第四十九题,然后一看下面是01背包,心想着再坚持是分钟把第五十题给水完了,结果01背包压维不但没看 就做个背包模板题还做了将近20分钟.. ...

  4. UVA-12563劲歌金曲——双重优先条件+变形01背包

    劲歌金曲 题意: 两个优化: ①唱歌次数最大 ②时间最长 以①为首选条件 01背包模型,歌曲就是物品,时长就是体积,每首歌唱或不唱就对应物品的选或不选. 核心代码: 状态: num[i],表示时长为i ...

  5. UVa12563 劲歌金曲

    题目:UVa12563 代码实现: #include<iostream> #include<cstdio> #include<utility> #include&l ...

  6. 例题 9-5 劲歌金曲(Jin Ge Jin Qu [h]ao Rujia Liu‘s Present 6, UVa 12563)

    原题链接:https://vjudge.net/problem/UVA-12563 分类:背包问题 备注:0-1背包变形 注意:千万不要包括给的时间t,因为劲歌金曲是必须要唱的! #include&l ...

  7. UVA 12563 劲歌金曲 Jin Ge Jin Qu hao

    劲歌金曲 Jin Ge Jin Qu hao 题面翻译 (如果当你看到这个标题的时候笑了,那么这个问题是为你准备的ヽ( ̄▽ ̄)ノ) 如果问一个麦霸:"你在KTV里必唱的曲目有哪些?" ...

  8. 劲歌金曲 UVA 12563

    劲歌金曲 UVA 12563 (If you smiled when you see the title, this problem is for you ^_^) For those who don ...

  9. uva 12563 劲歌金曲

    先介绍自己写的,比较循规蹈矩的方法.dp(i,j)表示必须在j时间内结束,在i,i+1,,,,n首歌中选择,可以唱的最大歌曲数 (包含jq) sing(i,j)表示在这个状态.歌曲数取最大的情况下,可 ...

最新文章

  1. 安卓怎么用抖音做锁屏_把锁屏密码设置成当前时间,随时间的变动!别人怎么也猜不出来...
  2. 安全领域多位世界级权威的智慧结晶——《黑客新型攻击防范:深入剖析犯罪软件》
  3. hdu 1544(求回文子串的个数)
  4. mysql 环形复制_mysql复制(Replication)
  5. 在 Windows 10 中开启移动 WLAN 热点
  6. 多线程服务端和客户端通信
  7. Android 相机,视频录制
  8. 【重磅】央行发大招!最全面的支付安全风险大检查来了……
  9. 音视频技术开发周刊 | 216
  10. C# 调用python
  11. vue 父传子_Vue.js教程Vue基本指令
  12. 收藏10个2012年最新发布的jQuery插件
  13. python123测验4程序题_Python面试题245道(从基础到高级)123~141——网络编程,Web—Flask...
  14. 无插件,跨平台,基于WebGL的三维地球来了!!!
  15. jar命令更新jar中的class文件
  16. 黑马redis实战-秒杀页面
  17. 英语中名词复数读法(清辅音、浊辅音)
  18. 【vim】你的背包里,缺不缺一份vim简明教程嘞?
  19. Eureka的自我保护机制与如何禁用
  20. Oracle数据库学习(六):where条件查询及关键字使用

热门文章

  1. 2022.3IDEA配置grep console
  2. jenkins如何上传文件到目标服务器,如何将文件上传到jenkins并用于构建?
  3. js 正则处理名字 只显示首和尾,中间用三个星号替代
  4. Ubuntu在防火墙中开放指定端口
  5. uc/OS-II操作系统:uc/OS基本概念及认识(从零到负,打通你的任督二脉)
  6. Python集合的update方法
  7. c语言ppt转化为图片,ppt转长图软件下载 神奇PPT转长图软件 v2.0.0.225 中文安装版(附安装使用教程) 下载-脚本之家...
  8. JXL自动换行的实现
  9. database2sharp mysql_C# NetCore使用AngleSharp爬取周公解梦数据 MySql数据库的自动创建和页面数据抓取...
  10. HashTable和HashMap