题目链接: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背包的更多相关文章

  1. UVA 12563 劲歌金曲(01背包)

    劲歌金曲 [题目链接]劲歌金曲 [题目类型]01背包 &题解: 题意:求在给定时间内,最多能唱多少歌曲,在最多歌曲的情况下,使唱的时间最长. 该题类似于01背包问题,可用01背包问题的解题思路 ...

  2. UVa 12563 劲歌金曲(0-1背包)

    https://vjudge.net/problem/UVA-12563 题意: 在一定的时间内连续唱歌,最后一首唱11分钟18秒的劲歌金曲,问最多能长多长时间. 思路: 0-1背包问题,背包容量为t ...

  3. 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 ...

  4. UVA.10130 SuperSale (DP 01背包)

    UVA.10130 SuperSale (DP 01背包) 题意分析 现在有一家人去超市购物.每个人都有所能携带的重量上限.超市中的每个商品有其相应的价值和重量,并且有规定,每人每种商品最多购买一个. ...

  5. UVA 562 Dividing coins --01背包的变形

    01背包的变形. 先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值. 代码: #include <iostre ...

  6. UVA 624 CD(01背包+输出方案)

    01背包,由于要输出方案,所以还要在dp的同时,保存一下路径. #include <iostream> #include <stdio.h> #include <stri ...

  7. UVA 562 Dividing coins (01背包)

    //平分硬币问题 //对sum/2进行01背包,sum-2*dp[sum/2] #include <iostream> #include <cstring> #include ...

  8. 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 ...

  9. uva 624 CD (01背包)

      CD  You have a long drive by car ahead. You have a tape recorder, but unfortunately your best musi ...

  10. UVA 624 CD[【01背包】(输出路径)

    <题目链接> 题目大意: 你要录制时间为N的带子,给你一张CD的不同时长的轨道,求总和不大于N的录制顺序 解题分析: 01背包问题,需要注意的是如何将路径输出. 由于dp时是会不断的将前面 ...

随机推荐

  1. C#异步编程(二)

    async和await结构 序 前篇博客异步编程系列(一) 已经介绍了何谓异步编程,这篇主要介绍怎么实现异步编程,主要通过C#5.0引入的async/await来实现. BeginInvoke和End ...

  2. Robot Framework:RF中对时间操作的datetime库常用关键字

    [转自:http://blog.csdn.net/r455678/article/details/52993765] 1.对固定日期进行操作,增加或减去单位时间或者时间段 2.对两个时间段进行操作 3 ...

  3. 注册表信息(安装包ProductCode,设置启动运行)

    一.获取安装包ProductCode后,再获取安装包DisplayVersion,比对安装包版本,确定是否更新当前应用(重新下载安装包,并运行安装包) //获取当前应用程序的安装包的ProductCo ...

  4. mybatis mapper.xml 配置文件问题(有的错误xml是不报的) 导致服务无法启动 。

    转载自 开源编程 一舟mybatsi xml编译报错,tomcat启动一直循环,导致内存溢出,启动失败 mapper.xml怎么知道有没有编译错误,哪个位置有错误 这应该是mybatis的一个bug, ...

  5. Silverlight项目笔记8:层次布局、客户端读取shp、ExecuteCountAsync、柱状图、url传参

    1.层次布局 由于地图窗口和菜单栏都在一个父容器内,在浏览器缩小到一定程度点击地图弹出infoWindow时,会出现菜单栏遮挡infoWindow中间部分的现象,于是通过设置Canvas.ZIndex ...

  6. Xml语言

    一.XML是什么?作用是什么? l  XML ( eXtensible Markup Language )语言是一种可扩展的标记语言.其中的可扩展是相对HTML来说的.因为XML标签没有被预定义,需要 ...

  7. UI2_UINavigationBar

    // // AppDelegate.m // UI2_UINavigationBar // // Created by zhangxueming on 15/7/6. // Copyright (c) ...

  8. DTCMS自定义标签,获取所有栏目以及获得二级子栏目导航

    取得二级栏目 DTcms.Web.UI\Label\category.cs中 get_category_child_list 返回当前所有子栏目 DTcms.Web.UI\Label\category ...

  9. Intersection of Two Linked Lists 解答

    Question Write a program to find the node at which the intersection of two singly linked lists begin ...

  10. ChromiumFX中js调用C#方法

    server端代码: ChromiumWebBrowser wb; wb.AddGlobalJSFunction("CfxHelloWorld").Execute += CfxHe ...