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时是会不断的将前面 ...
随机推荐
- SQL Sever 身份验证 sa用户设置
1.用windows身份验证登陆数据库找到sa用户 2.鼠标右键sa->属性->常规,设置密码. 3.选择状态->登陆选择已启用 4.选中当前数据库 鼠标右键->属性 5.选择 ...
- 转:python webdriver API 之cookie 处理
有时候我们需要验证浏览器中是否存在某个 cookie,因为基于真实的 cookie 的测试是无法通过白盒和集成测试完成的.webdriver 可以读取.添加和删除 cookie 信息.webdrive ...
- ligerui+json_002_Grid用法、属性总结
原文更全面,地址: http://blog.csdn.net/dxnn520/article/details/8216560 // ================================== ...
- zw版【转发·台湾nvp系列例程】HALCON MirrorRegion (Delphi)
zw版[转发·台湾nvp系列例程]HALCON MirrorRegion (Delphi) procedure TForm1.Button1Click(Sender: TObject);var img ...
- Parse_ini_file
parse_ini_file() 函数解析一个配置文件,并以数组的形式返回其中的设置. 注释:本函数可以用来读取你自己的应用程序的配置文件.本函数与 php.ini 文件没有关系,该文件在运行脚本时就 ...
- 使用Json.Net处理json序列化和反序列化接口或继承类
以前一直没有怎么关注过Newtonsoft的Json.Net这个第三方的.NET Json框架,主要是我以前在开发项目的时候大多数使用的都是.NET自带的Json序列化类JavaScriptSeria ...
- kernel32.dll出错解决方案
kernel32.dll 一.什么是kernel32内核文件 kernel32.dll是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件.它控制着系统的内存管理.数据的输入输 ...
- Watir资源列表【转】
Watir简介 "Watir" (发音与 water相近) 全写是 "Web Application Testing in Ruby".Watir是一款用Rub ...
- Android ListView的理解(一)
一.概述 这部分主要是讲解ListView在初始时,即setAdapter之后,如何将Adapter中取得的view添加到ListView中,主要涉及到几个方法: layoutChildren,fil ...
- owner window 和 parent window 有什么区别?
1.Pop-up窗口: 一个弹出窗口是必须具有WS_POPUP属性的窗口,弹出窗口只能是一个Top-Level窗口,不能是子窗口,弹出窗口多用于对话框和消 ...