【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 107071
  • 排名 - 231

最新评论

阅读排行榜

评论排行榜

你刚刚继承了流行的“破锣摇滚”乐队录制的尚未发表的N(1 <= N <= 20)首歌的版权。你打算从中精选一些歌曲,发行M(1 <= M <= 20)张CD。每一张CD最多可以容纳T(1 <= T <= 20)分钟的音乐,一首歌不能分装在两张CD中。

不巧你是一位古典音乐迷,不懂如何判定这些歌的艺术价值。于是你决定根据以下标准进行选择:

 1.歌曲必须按照创作的时间顺序在CD盘上出现。
 2.选中的歌曲数目尽可能地多。

格式
PROGRAM NAME: rockers
INPUT FORMAT:(file rockers.in)

第一行: 三个整数:N, T, M.

第二行: N个整数,分别表示每首歌的长度,按创作时间顺序排列。

OUTPUT FORMAT:(file rockers.out)

一个整数,表示可以装进M张CD盘的乐曲的最大数目。

SAMPLE INPUT
4 5 2
4 3 4 2

SAMPLE OUTPUT
3

【参考程序】:

/*
ID: XIONGNA1
PROG: rockers
LANG: C++
*/
#include<
iostream>
#include<
cstring>
using
 namespace std;
int f[21][21][21],a[21];
int n,t,m;
int MAX(int x,int y)
{
    
return x>y?x:y;
}
int main()
{
    freopen(
"rockers.in","r",stdin);
    freopen(
"rockers.out","w",stdout);
    scanf(
"%d%d%d",&n,&t,&m);
    
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
    memset(f,
0,sizeof(f));
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=m;j++)
            
for (int k=0;k<=t;k++)
                
if (k<a[i])
                    f[i][j][k]
=MAX(f[i][j-1][t],f[i-1][j][k]);
                
else
                    f[i][j][k]=
MAX(f[i-1][j-1][t],f[i-1][j][k-a[i]]+1);
    printf(
"%d\n",f[n][m][t]);
    
return 0;
}


 

posted on 2009-07-27 09:58 开拓者 阅读(395) 评论(0)  编辑 收藏 引用 所属分类: USACO 题解

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理