博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA - 12563 Jin Ge Jin Qu hao 01背包
阅读量:3904 次
发布时间:2019-05-23

本文共 679 字,大约阅读时间需要 2 分钟。

思路:

因为题目给出的时间很大,但是实际上不需要这么多的时间,因为一共50首歌,一个最多3分钟,所以最多180*50时间,所以如果题目(给出的时间-1)大于总歌曲时间的话,直接输出总时间+678。剩下的情况则进行dp。判断的标准是在歌曲数目和歌曲时间进行判断的。

代码如下:

#include 
#include
#include
#include
using namespace std;const int maxn=55;int t;int n,m;int a[maxn];struct node { int num; int time;};node dp[10000];int compare (node a,node b){ if(a.num
=tot) { printf("%d %d\n",n+1,tot+678); continue; } memset (dp,0,sizeof(dp)); for (int i=1;i<=n;i++) { for (int j=m-1;j>=a[i];j--) { node tep; tep.num=dp[j-a[i]].num+1; tep.time=dp[j-a[i]].time+a[i]; if(compare(dp[j],tep)) dp[j]=tep; } } printf("%d %d\n",dp[m-1].num+1,dp[m-1].time+678); } return 0;}

 

转载地址:http://fkoen.baihongyu.com/

你可能感兴趣的文章
需求文件requirements.txt的创建及使用
查看>>
300. 最长上升子序列
查看>>
445. 两数相加 II
查看>>
449. 序列化和反序列化二叉搜索树
查看>>
450. 删除二叉搜索树中的节点
查看>>
451. 根据字符出现频率排序
查看>>
454. 四数相加 II
查看>>
467. 环绕字符串中唯一的子字符串
查看>>
468. 验证IP地址
查看>>
474. 一和零
查看>>
486. 预测赢家
查看>>
494. 目标和
查看>>
520. 检测大写字母
查看>>
数据处理和训练模型的技巧
查看>>
vb 中如何做同步 异步?
查看>>
geturl
查看>>
关于sizeof
查看>>
windows 核心编程笔记.070301
查看>>
WINDOWS核心编程笔记 070303
查看>>
终于解决了交叉表左上角,每页都显示的问题.
查看>>