• uva12563 Jin Ge Jin Qu hao


    题目大意:

    KTV里面有n首歌曲你可以选择,每首歌曲的时长都给出了. 对于每首歌曲,你最多只能唱1遍. 现在给你一个时间限制t (t<=10^9) , 问你在最多t-1秒的时间内可以唱多少首歌曲num , 且最长唱歌时间是多少time (time必须<=t-1) ? 最终输出num+1 和 time+678 即可.

    注意: 你需要优先让歌曲数目最大的情况下,再去选择总时长最长的.

    /*
        两个01背包。
        两个背包大小都为180*n+678,其中一个背包存歌曲数目,另一个存歌曲总长度
        对于劲歌金曲,我们可以把他看成一首体积为1s,价值为678的物品,由于优势显著,所以必选
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int Case,t,n,m,dp[10010],ti[10010],w[60];
    int main(){
        //freopen("Cola.txt","r",stdin);
        scanf("%d",&t);
        while(t--){
            Case++;
            scanf("%d%d",&n,&m);
            memset(dp,0,sizeof(dp));
            memset(ti,0,sizeof(ti));
            for(int i=1;i<=n;i++)scanf("%d",&w[i]);
            for(int i=1;i<=n;i++){
                for(int j=m-1;j>=w[i];j--){
                    if((dp[j-w[i]]+1>dp[j])||(dp[j-w[i]]+1==dp[j]&&ti[j-w[i]]+w[i]>ti[j])){
                        dp[j]=dp[j-w[i]]+1;
                        ti[j]=ti[j-w[i]]+w[i];
                    }
                }
            }
            int ans1=dp[m-1],ans2=ti[m-1];
            printf("Case %d: %d %d
    ",Case,ans1+1,ans2+678);
        }
    }
  • 相关阅读:
    CSP游戏 4
    CSP 交通规划
    CSP 地铁修建
    CSP 通信网络
    CSP URL映射
    CSP 权限查询
    CSP Markdown
    CSP JSON 查询
    SQL里的子查询
    SQL里的操作符
  • 原文地址:https://www.cnblogs.com/thmyl/p/7404606.html
Copyright © 2020-2023  润新知