zoukankan      html  css  js  c++  java
  • 洛谷 UVA12563 Jin Ge Jin Qu hao 题解

    这道题其实是一道01背包的变形题,主要思路如下:在不把剩余时间用光的前提下(剩余时间>0),尽可能的多唱歌。于是我们可以用dp[i]表示的是到当前i秒时,最多可以唱多少歌。

    状态转换方程:dp[k]=max(dp[k],dp[k-yy]+1);最后输出可以唱多少歌。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,t,m,yy;
     4 int dp[100000];
     5 int main()
     6 {
     7     cin>>n;
     8     for(int i=1;i<=n;i++)
     9     {
    10         memset(dp,0x8f,sizeof(dp));
    11         cin>>m>>t;
    12         dp[0]=0;
    13         for(int j=1;j<=m;j++)
    14         {
    15             cin>>yy;
    16             for(int k=t-1;k>=yy;k--)
    17             {
    18                 dp[k]=max(dp[k],dp[k-yy]+1);
    19             }
    20         }
    21         int ans;
    22         for(int j=ans=t-1;j>=0;j--)
    23         {
    24             if(dp[j]>dp[ans])ans=j;
    25         }
    26         cout<<"Case"<<" "<<i<<":"<<" "<<dp[ans]+1<<" "<<ans+678<<endl;
    27     }
    28     return 0;
    29 }
    请各位大佬斧正(反正我不认识斧正是什么意思)
  • 相关阅读:
    DML数据操作语言练习
    表的操作练习
    20151218--地区导航习题
    20151217--Ajax的一点补充
    02151216--Ajax
    json(转)
    Node.js(转) -- 临时来说还看不懂!
    20151113--JSTL
    20151210--MVC
    链表(转)
  • 原文地址:https://www.cnblogs.com/handsome-zyc/p/11237327.html
Copyright © 2011-2022 走看看