UVA12563 - Jin Ge Jin Qu hao
2016-02-03 13:32
267 查看
01背包问题
这道题是要求出再t时间内能够唱的最多的歌曲数,在这个前提下,唱的最长时间.因为每首歌长不大于三分钟,所以在给定歌曲数n的情况下,唱的时间最长为3*n+678.因为劲歌金曲一定要唱,所以要求出在t-1秒内唱的最多歌曲数和此前提下的最长时间,转化为了01背包问题.
这道题是要求出再t时间内能够唱的最多的歌曲数,在这个前提下,唱的最长时间.因为每首歌长不大于三分钟,所以在给定歌曲数n的情况下,唱的时间最长为3*n+678.因为劲歌金曲一定要唱,所以要求出在t-1秒内唱的最多歌曲数和此前提下的最长时间,转化为了01背包问题.
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <map> #include <vector> #include <cmath> using namespace std; struct Songs{ int x, len; }dp[10000]; int main() { // freopen("in.txt", "r", stdin); int t, cas = 0; cin >> t; while(t--) { int n, m; cin >> n >> m; memset(dp, 0, sizeof(dp)); for(int i = 0; i < n; i++) { int k; cin >> k; for(int j = m - 1; j >= k; j--) { if(dp[j - k].x + 1 > dp[j].x) { dp[j].x = dp[j-k].x + 1; dp[j].len = dp[j-k].len + k; } else if(dp[j-k].x + 1 == dp[j].x && dp[j-k].len + k > dp[j].len) dp[j].len = dp[j-k].len + k; } } printf("Case %d: %d %d\n", ++cas, dp[m-1].x + 1, dp[m-1].len + 678); } return 0; }
相关文章推荐
- git 退回到某個版本
- linux+C环境下动态管理头文件和库文件
- Docker Swarm与Apache Mesos的区别
- 使用dom4j将xml文件转换成bean
- Haroopad Markdown 编辑器代码语法高亮支持
- linux虚拟机中修改MAC
- 输入输出流
- GIS基本概念
- BZOJ 2751: [HAOI2012]容易题(easy) 数学
- 328. Odd Even Linked List
- 在eclipse中使用javap
- HTTPS详解SSL/TLS
- [LeetCode]226. Invert Binary Tree
- 一个基于MVVM的TableView组件化实现方案——AITableView
- 大学宿舍关系 去一流大学吧
- 比较常用的几个正则表达式(匹配数字)
- Unity3D游戏开发之小地图的实现
- Effective C++ 05:了解C++默默编写并调用哪些函数
- 好的android 相关的技术博客
- HttpUtil 工具类