zoukankan      html  css  js  c++  java
  • uva12563

    可以说是第一题DP,
    也不是这样说,就是理解的第一题,虽然还是似懂非懂

    但套路有一点:初始化,然后状态的转化就是递推赋值,然后和新的状态比较一下。OK了

    题意必须先明确保证唱的歌曲数目最多,然后再开一个数组去记录伴随的唱歌时间使之最长。OK

    UVA 12563

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<iostream>
    #include<math.h>
    #include<queue>
    #include<stack>
    #include<algorithm>
    using namespace std;
    
    //  得先保证歌曲的数目最大,然后再去搞定时间,时间只要再开一个数组就搞定了
    //  也没必要逆着来
    int path[55][10005];
    int dp[55][10005];      //前i个在第j秒最多能唱的歌曲数目;
    int n,t;
    int val[55];
    
    void debug()
    {
        for(int i=1;i<=n;i++)
        {
            printf("%d ",dp[i][t-1]);
        }
        printf("
    ");
    }
    
    int main()
    {
        int T;
        int qq=1;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&t);
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&val[i]);
            }
            memset(path,0,sizeof(path));
            memset(dp,0,sizeof(dp));
    
            for(int i=1;i<=n;i++)
            {
                for(int j=0;j<=t-1;j++)
                {
                    dp[i][j]=dp[i-1][j];
                    path[i][j]=path[i-1][j];
                    if(j>=val[i])
                    {
                        if(dp[i][j]<dp[i-1][j-val[i]]+1)
                        {
                            dp[i][j]=dp[i-1][j-val[i]]+1;
                            path[i][j]=path[i-1][j-val[i]]+val[i];
                        }
                        else if(dp[i][j]==dp[i-1][j-val[i]]+1)
                        {
                            path[i][j]=max(path[i][j],path[i-1][j-val[i]]+val[i]);
                        }
                    }
                }
            }
            int max_=-1;
    
            for(int i=1;i<=n;i++)
            {
                if(max_<dp[n][t-1])
                {
                    max_=dp[n][t-1];
                }
            }
           // debug();
    
            printf("Case %d: %d %d
    ",qq++,max_+1,path[n][t-1]+678);
        }
        return 0;
    }
    
    
    
    /*
    3 100
    60 70 80
    3 100
    30 69 70
    3 12
    11 1 1
    */
  • 相关阅读:
    Nginx安装
    node.js搭建vue脚手架
    Oracle引入数据
    MVC引入Junit单元测试
    Git版本控制器
    IDEA-Maven
    SSM框架整合
    【测试基础第五篇】测试用例编写和评审
    【测试基础第四篇】测试用例设计方法
    【测试基础第三篇】需求测试分析
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934577.html
Copyright © 2011-2022 走看看