UVA 12563 Jin Ge Jin Qu hao(01背包|经典动态规划)

来源:互联网 发布:矩阵特征值分解 编辑:程序博客网 时间:2024/06/17 08:41

题目链接

题意

可以参见紫书P274
1. n首歌,在t-1秒内唱完
2. 唱完之后唱678s的金曲,这样就能使唱的时间最长
3. 我们要先保证唱的总曲目最多,当曲目相同的时候保证总时长最长

解决


  1. 经典的01背包问题
  2. 考虑到状态比较复杂,有曲目,有时长.我们把状态用一个结构体来表示
  3. 这里参考了下博客,用了滚动数组
  4. 要注意一下,如果前n首的总时长<=t-1,那么这n首歌都可以唱
  5. 注意一下我们最终的状态是t-1的状态而不是t的状态

我也是算法新手,对于滚动数组我是这么理解的
1. 我们遍历每首歌在一些情况下的最优解(也就是最外层的for(i) )
2. 可以看一下紫书的滚动数组的讲解,我能力还不足以讲清
3. 我还是再想想吧^_^,我会补充的!

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int t[52];struct node{    int num,time;    bool operator>(const node &n2)const    {        if(num==n2.num) return time>n2.time;        return num>n2.num;    }}dp[180*52];int main(){    int c=1,sum_t,cases;    scanf("%d",&cases);    while(cases--)    {        printf("Case %d: ",c++);        int n,max_t;        scanf("%d%d",&n,&max_t);        sum_t=0;        for(int i=1;i<=n;i++)        {            scanf("%d",&t[i]);            sum_t+=t[i];        }        if(sum_t<=max_t-1)        {            printf("%d %d\n",n+1,sum_t+678);            continue;        }        max_t--;            //选的歌曲总时长应<=max_t-1而不是max_t(这样就没法唱金曲了)        memset(dp,0,sizeof(dp));        for(int i=1;i<=n;i++)        {            for(int j=max_t;j>=t[i];j--)        //滚动数组中j只能从后往前扫            {                node tmp;                tmp.num=dp[j-t[i]].num+1;       //状态转移                tmp.time=dp[j-t[i]].time+t[i];  //状态转移                if(tmp>dp[j]) dp[j]=tmp;        //类似于01背包问题中,能放下的情况            }        }        printf("%d %d\n",dp[max_t].num+1,dp[max_t].time+678);    }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 破壁机打出的果汁很浓稠怎么办 榨的果汁不甜怎么办 11个月宝宝吃盐怎么办 1岁半宝宝长牙慢怎么办 小孩里面的牙黑怎么办 7个半月宝宝便秘怎么办 2个月婴幼儿便秘怎么办 3个月宝宝不消化怎么办 一天大便二三次不消化怎么办 不消化没胃口几天不大便怎么办? 两个月的宝宝拉绿屎怎么办 肠胃不好消化功能差怎么办 2岁宝宝消化不好怎么办 5天新生儿不拉大便怎么办 七个月宝宝一周不拉屎怎么办 七个月的宝宝消化不良怎么办 七个月宝宝消化不良拉肚子怎么办 宝宝六个月了便秘怎么办 宝宝拉水酸臭味怎么办 50天婴儿不拉屎怎么办 六个月宝宝吃米粉便秘怎么办 纯母乳喂养的宝宝便秘了怎么办 换奶粉拉绿色是怎么办 2个月宝宝发烧怎么办 小宝绿色稀大便怎么办 新生儿吃奶粉大便干燥怎么办 婴儿拉绿色奶瓣怎么办 宝宝吃奶粉大便干燥怎么办 婴儿吃奶粉不大便怎么办 孩子喝奶粉拉大便干怎么办 吃奶粉拉不出来怎么办 一岁半宝宝睡觉抱着睡放不下怎么办 3月大婴儿拉奶瓣怎么办 70多天宝宝便秘怎么办 宝宝喝奶粉上火便秘怎么办 a2奶粉吃了便秘怎么办 两个月宝宝两天没有大便怎么办 婴儿一直拉肚子吃药也不好怎么办 吃奶粉的婴儿便秘怎么办 一个多月小狗便便不成形怎么办 3个月宝宝不拉屎怎么办