Raucous Rockers
来源:互联网 发布:最新手游服务端源码 编辑:程序博客网 时间:2024/05/19 07:08
题意:有N首歌(按照写作的顺序给出每首歌的时间),还有M个压缩碟,每个压缩碟能容纳T分钟的歌曲。歌曲不允许跨碟存储,而且要按照写作顺序存储。求这M个压缩碟最多可以存储多少首歌?
解题思路:
- DP问题,开始不知到怎么做,于是参考了USACO中Skywalker的“一种时间复杂度O(n^2)的DP算法”(http://www.nocow.cn/index.php/USACO/rockers)
- f(i, j) = (a, b)代表在最优情况下,从前i首歌曲中存储j首歌曲后,已经占用a个压缩碟,且第a+1个压缩碟中已经占据b时间
- 边界条件j=0时,f(i, j) = (0, 0)
- 滚雪球的过程:f(i, j) = min(f(i - 1, j), f(i - 1, j - 1) + cost_of_song(i))。也就是将f(i, j)分为不包括第i首歌以及包括第i首歌两种情况。求最小值要比较(a, b)这个数对,首先比较a,在a相等的情况下再比较b
- 最后从N到0遍历f[N][j],找到第一个满足条件的数对(a, b)那么对应的j就是最终的答案
代码:
/*ID: zc.rene1LANG: CPROG: rockers*/#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 20int main(void){ FILE *fin, *fout; int N, T, M; int songs[MAX + 1]; int f[MAX + 1][MAX + 1][2]; int i, j, temp_m, temp_t; fin = fopen("rockers.in", "r"); fout = fopen("rockers.out", "w"); /*get the input*/ fscanf(fin, "%d %d %d", &N, &T, &M); for (i=1; i<=N; i++) {fscanf(fin, "%d", &songs[i]); } /*begin DP*/ for (i=0; i<=N; i++) {for (j=0; j<=N; j++){ if (j == 0) {memset(f[i][j], 0, 2 * sizeof(int)); } else {f[i][j][0] = M;f[i][j][1] = T; }} } for (i=1; i<=N; i++) {for (j=1; j<=i; j++){ temp_m = f[i-1][j-1][0]; temp_t = f[i-1][j-1][1]; if (songs[i] > T) {temp_m = M;temp_t = T; } else {if ((temp_t + songs[i]) <= T){ temp_t += songs[i];}else{ temp_m++; temp_t = songs[i];} } if (f[i-1][j][0] < temp_m) {memcpy(f[i][j], f[i-1][j], 2 * sizeof(int)); } else if (f[i-1][j][0] == temp_m) {if (f[i-1][j][1] > temp_t){ f[i][j][0] = temp_m; f[i][j][1] = temp_t;}else{ memcpy(f[i][j], f[i-1][j], 2 * sizeof(int));} } else {f[i][j][0] = temp_m;f[i][j][1] = temp_t; }} } for (j=N; j>=0; j--) {if (f[N][j][0] < M){ fprintf(fout, "%d\n", j); break;} } if (j == -1) {fprintf(fout, "0\n"); } return 0;}
- Raucous Rockers
- Raucous Rockers~
- USACO 3.4 Raucous Rockers (rockers)
- USACO3.4.3 Raucous Rockers (rockers)
- USACO3.4.3 Raucous Rockers (rockers)
- Section 3.4 Raucous Rockers
- usaco - Raucous Rockers
- usaco Raucous Rockers
- usaco Raucous Rockers
- usaco Raucous Rockers java
- 动规-Raucous Rockers
- UVA 473 Raucous Rockers
- usaco Raucous Rockers(dp)
- usaco3.4.3 Raucous Rockers
- UVA 473 - Raucous Rockers (dp)
- USACO Raucous Rockers 解题报告
- UVA 473 - Raucous Rockers(dp)
- uva 473 - Raucous Rockers(dp)
- Ubuntu12.04搭建jdk
- as与is用法总结
- java单例模式
- Configuring IPsec VPN with Kerio Control
- 【D3.js数据可视化系列教程】(十九)--交互图表之鼠标悬停
- Raucous Rockers
- oracle 11g ASM 的管理用户 asm shutdown immediate ORA-01031: insufficient privileges
- 揭密一致性读------之UNDO一致性构造
- 导航(1) 侧滑菜单导航 可替代AndroidSideMenu
- nyoj整数划分(二)
- SOAP
- web页面之弹出窗口
- windows7 64位 下配置mysql-5.5.25-winx64
- 跟踪G-Sensor有时不起作用的问题