zoukankan      html  css  js  c++  java
  • USACO 3.4 Raucous Rockers

    Raucous Rockers

    You just inherited the rights to N (1 <= N <= 20) previously unreleased songs recorded by the popular group Raucous Rockers. You plan to release a set of M (1 <= M <= 20) compact disks with a selection of these songs. Each disk can hold a maximum of T (1 <= T <= 20) minutes of music, and a song can not overlap from one disk to another.

    Since you are a classical music fan and have no way to judge the artistic merits of these songs, you decide on the following criteria for making the selection:

    • The songs on the set of disks must appear in the order of the dates that they were written.
    • The total number of songs included will be maximized.

    PROGRAM NAME: rockers

    INPUT FORMAT

    Line 1: Three integers: N, T, and M.
    Line 2: N integers that are the lengths of the songs ordered by the date they were written.

    SAMPLE INPUT (file rockers.in)

    4 5 2
    4 3 4 2
    

    OUTPUT FORMAT

    A single line with an integer that is the number of songs that will fit on M disks.

    SAMPLE OUTPUT (file rockers.out)

    3

    ——————————————————————————
    一道连我这种蒟蒻都能做出来的dp
    dp(i,j)=dp(i-1,k)+packbag(v=t,k+1--j)
    【i表示选了几个背包,j表示从前到后选了几首歌】
    【然后做一个背包,关于容量为t然后从k+1到j之间选歌】
    【背包预处理应该会更快,然而在线处理复杂度够了而且绰绰有余】
     1 /*
     2 ID: ivorysi
     3 PROG: rockers
     4 LANG: C++
     5 */
     6 #include <iostream>
     7 #include <cstdio>
     8 #include <cstring>
     9 #include <algorithm>
    10 #include <queue>
    11 #include <set>
    12 #include <vector>
    13 #include <string.h>
    14 #define siji(i,x,y) for(int i=(x);i<=(y);++i)
    15 #define gongzi(j,x,y) for(int j=(x);j>=(y);--j)
    16 #define xiaosiji(i,x,y) for(int i=(x);i<(y);++i)
    17 #define sigongzi(j,x,y) for(int j=(x);j>(y);--j)
    18 #define inf 0x3f3f3f3f
    19 #define MAXN 400005
    20 #define ivorysi
    21 #define mo 97797977
    22 #define ha 974711
    23 #define ba 47
    24 #define fi first
    25 #define se second
    26 #define pii pair<int,int>
    27 using namespace std;
    28 typedef long long ll;
    29 int n,m,t;
    30 int song[25];
    31 int getso[25][25];
    32 int f[25];
    33 inline int max(int a,int b){return a>b?a:b;}
    34 int check(int b,int e) {
    35     if(e<b) return 0;
    36     memset(f,0,sizeof(f));
    37     siji(i,b,e) {
    38         gongzi(j,t,song[i]) {
    39             f[j]=max(f[j],f[j-song[i]]+1);
    40         }
    41     }
    42     return f[t];
    43 }
    44 void solve() {
    45     scanf("%d%d%d",&n,&t,&m);
    46     siji(i,1,n) scanf("%d",&song[i]);
    47     siji(i,1,m) {
    48         siji(j,1,n) {
    49             xiaosiji(k,0,j) {
    50                 getso[i][j]=max(getso[i][j],getso[i-1][k]+check(k+1,j));
    51             }
    52         }
    53     }
    54     printf("%d
    ",getso[m][n]);
    55 }
    56 int main(int argc, char const *argv[])
    57 {
    58 #ifdef ivorysi
    59     freopen("rockers.in","r",stdin);
    60     freopen("rockers.out","w",stdout);
    61 #else
    62     freopen("f1.in","r",stdin);
    63 #endif
    64     solve();
    65 }
     
     
  • 相关阅读:
    Android RSS阅读器
    X86汇编语言学习教程之1 ————前言
    beanstalk源码剖析——概述
    从软件质量看如何写代码(1)
    软件开发模型
    软件质量思考
    数据结构概述
    Don't Distract New Programmers with OOP(转)
    Linus Torvalds’s Lessons on Software Development Management(转)
    谈测试驱动开发
  • 原文地址:https://www.cnblogs.com/ivorysi/p/6242831.html
Copyright © 2011-2022 走看看