记录编号 460429 评测结果 AAAAAAAAAAAA
题目名称 [USACO] “破锣摇滚”乐队 最终得分 100
用户昵称 Gravatarlingyixiaoyao 是否通过 通过
代码语言 C++ 运行时间 0.011 s
提交时间 2017-10-17 07:01:03 内存使用 5.39 MiB
显示代码纯文本
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <map>
#include <set>
using namespace std;
const int maxn=100+10;

int n,m,t,a[maxn],f[maxn][maxn][maxn];

int Min(int i,int j);
int Max(int i,int j);
int getint();
void init();
void DP();
int work(int l,int r);

int main()
{
	freopen("rockers.in","r",stdin);
	freopen("rockers.out","w",stdout);
	
	init();
	DP();
	
	return 0;
}

void DP()
{
    for(int i=1;i<=n;i++)
    {
    	for(int j=1;j<=m;j++)
    	{
    		for(int k=1;k<=t;k++)
			{
                f[i][j][k]=f[i-1][j][k];   
                if(k>=a[i])                    
                    f[i][j][k]=max(f[i][j][k],1+max(f[i-1][j][k-a[i]],f[i-1][j-1][t]));  
            } 
		}
	}
        
    printf("%d",f[n][m][t]);
}
void init()
{
	cin>>n>>t>>m;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
}
int Min(int i,int j)
{
	return (i>j?j:i);
}
int Max(int i,int j)
{
	return (i>j?i:j);
}
int getint()
{
	char ch;
	int s=1,x=0;
	while(ch=getchar(),ch>'9' || ch<'0')
	{
		if(ch=='-')
			s=-1;
	}
	while(ch>='0' && ch<='9')
	{
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();
	}
	return s*x;
}