Uva 12563,劲歌金曲,01背包
题目链接:https://uva.onlinejudge.org/external/125/12563.pdf
题意:n首歌,每首歌的长度给出,还剩 t 秒钟,由于KTV不会在一首歌没有唱完的情况下切歌,求在总曲目尽量多的情况下,唱的最久。
分析:
刚开始,题意看错了,结果就按01背包模板了,求了在 t 时间下唱的最久,然后再找出唱了几首歌。WA到疯了,最后实在是崩溃啊!
然后,这个题目没做出来,主要还是01背包没弄透彻。可以利用二维 [2][t] 的滚动数组求路径,这里不仅是优化了空间,而且,当我找到最优值的时候,可以很快找到路径 [p^1][]之前已经被覆盖,也就是说,哪些歌被选了,就有[p^1][t] == ans;
然后要理解p^1,这样的覆盖,刚开始p=1;p^1,进行了初始化,递推,每递推一层,p = p^1;最后,p被转化到下一个状态了,在找路径的时候要转化回来。
/*
#include <bits/stdc++.h>
using namespace std; #define C 1000000 int v[55];
int w[55];
int f[C]; int main()
{ int T;
int cases = 1;
scanf("%d",&T);
while(T--)
{
int n,t;
scanf("%d%d",&n,&t); int temp;
for(int i=1; i<=n; i++)
{
scanf("%d",&temp);
v[i] = temp;
w[i] = temp;
} memset(f,0,sizeof(f)); for(int i=1; i<=n; i++)
{
for(int j=t; j>=0; j--)
{
if(j>=v[i])
f[j] = max(f[j],f[j-v[i]]+w[i]);
}
} //printf("%d\n",f[t]);
//printf("%d\n",f[t-1]); vector<int> ans;
ans.clear();
int sum = f[t];
for(int i=n; i>=1; i--)
{
if(sum-v[i]==f[sum-v[i]])
{
ans.push_back(v[i]);
sum-=v[i];
}
} sort(ans.begin(),ans.end()); if(f[t]>=t)
{
ans.clear();
int the_ans=-1;
for(int i=0; i<t; i++)
{
if(f[i]<f[t])
{
if(f[i]>the_ans)
the_ans = f[i];
}
}
int sum = the_ans;
for(int i=n; i>=1; i--)
{
if(sum-v[i]==f[sum-v[i]])
{
ans.push_back(v[i]);
sum-=v[i];
}
}
printf("Case %d: %d %d\n",cases++,ans.size()+1,the_ans+678);
}
else if(f[t]<t)
printf("Case %d: %d %d\n",cases++,ans.size()+1,f[t]+678); } return 0;
}
*/
#include <bits/stdc++.h>
using namespace std; int n,t; const int maxn=; int len[maxn];
int d[][maxn*+]; int main()
{
int T;
scanf("%d",&T); for(int kase = ; kase<=T; kase++)
{
scanf("%d%d",&n,&t);
for(int i=; i<=n; i++)
scanf("%d",&len[i]); for(int i=; i<t; i++)
d[][i] = -;
d[][] = ; int p = ,ans =;
for(int i=; i<=n; i++)
{
for(int j=; j<t; j++)
{
d[p][j] = d[p^][j];
if(j>=len[i]&&d[p^][j-len[i]]>=)
{
d[p][j] = max(d[p][j],d[p^][j-len[i]]+);
}
ans = max(ans,d[p][j]);
}
p = p^;
}
for(int i=t-; i>=; i--)
{
if(d[p^][i]==ans)
{
printf("Case %d: %d %d\n",kase,ans+,i+);
break;
}
}
} return ;
}
Uva 12563,劲歌金曲,01背包的更多相关文章
- UVA 12563 劲歌金曲(01背包)
劲歌金曲 [题目链接]劲歌金曲 [题目类型]01背包 &题解: 题意:求在给定时间内,最多能唱多少歌曲,在最多歌曲的情况下,使唱的时间最长. 该题类似于01背包问题,可用01背包问题的解题思路 ...
- UVa 12563 劲歌金曲(0-1背包)
https://vjudge.net/problem/UVA-12563 题意: 在一定的时间内连续唱歌,最后一首唱11分钟18秒的劲歌金曲,问最多能长多长时间. 思路: 0-1背包问题,背包容量为t ...
- UVa 12563 劲歌金曲 刘汝佳第二版例题9-5;
Problem J Jin Ge Jin Qu [h]ao (If you smiled when you see the title, this problem is for you ^_^) Fo ...
- UVA.10130 SuperSale (DP 01背包)
UVA.10130 SuperSale (DP 01背包) 题意分析 现在有一家人去超市购物.每个人都有所能携带的重量上限.超市中的每个商品有其相应的价值和重量,并且有规定,每人每种商品最多购买一个. ...
- UVA 562 Dividing coins --01背包的变形
01背包的变形. 先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值. 代码: #include <iostre ...
- UVA 624 CD(01背包+输出方案)
01背包,由于要输出方案,所以还要在dp的同时,保存一下路径. #include <iostream> #include <stdio.h> #include <stri ...
- UVA 562 Dividing coins (01背包)
//平分硬币问题 //对sum/2进行01背包,sum-2*dp[sum/2] #include <iostream> #include <cstring> #include ...
- UVA 624 CD(DP + 01背包)
CD You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music i ...
- uva 624 CD (01背包)
CD You have a long drive by car ahead. You have a tape recorder, but unfortunately your best musi ...
- UVA 624 CD[【01背包】(输出路径)
<题目链接> 题目大意: 你要录制时间为N的带子,给你一张CD的不同时长的轨道,求总和不大于N的录制顺序 解题分析: 01背包问题,需要注意的是如何将路径输出. 由于dp时是会不断的将前面 ...
随机推荐
- pg_rewind 介绍
pg_rewind—使一个PostgreSQL数据目录与另一个数据目录(该目录从第一个PostgreSQL数据目录创建而来)一致. 描述 pg_rewind是一个在集群的时间线参数偏离之后,用于使一个 ...
- Groupon面经Prepare: Max Cycle Length
题目是遇到偶数/2,遇到奇数 *3 + 1的题目,然后找一个range内所有数字的max cycle length.对于一个数字,比如说44,按照题目的公式不停计算,过程是 44, 22, 11, 8 ...
- Lintcode: Segment Tree Query
For an integer array (index from 0 to n-1, where n is the size of this array), in the corresponding ...
- Codeforce Round #213 Div2
哎,弄了半天这次的C还是没出,真是捉急!,还TM的以为前几次只是运气不好!太逗了!
- HDU 5000 Clone(离散数学+DP)(2014 ACM/ICPC Asia Regional Anshan Online)
Problem Description After eating food from Chernobyl, DRD got a super power: he could clone himself ...
- .scss写法及如何转化为.css
scss可视化工具:http://koala-app.com/index-zh.html scss讲解地址:http://www.cnblogs.com/adine/archive/2012/12/1 ...
- centos的网路配置文件的位置
在这个路径下:/etc/sysconfig/network-scripts/ 每个网卡有相应的配置文件
- 【sinatra】结合Padrino framework
用Sinatra来做复杂的Web应用时,会出现若干个比较麻烦的点. 要手工作成一个个的应用骨架.作成test .view.public目录等等 将Sinatra DSL集中在一个类中的话,画面数量增加 ...
- Linux/Unix笔记本
Linux介绍 Linux入门——个人感想 Google怎么用linux 初入Linux Windows XP硬盘安装Ubuntu 12.04双系统图文详解 实例讲解虚拟机3种网络模式(桥接.nat. ...
- Linux workqueue疑问【转】
转自:http://blog.csdn.net/angle_birds/article/details/9387365 各位大神,你们好.我在使用workqueue的过程中遇到一个问题. 项目采用uC ...