【USACO3-4-3】“破锣摇滚”乐队 dfs

原题

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

#define N 109

int song[N],cd[N];
int n,m,t,cnt=1,ans=-1; 

void dfs(int now,int x)
{
    if (now==n+1) {ans=max(ans,x);return;}
    if (x+n+1-now<ans) return;
    if (cd[cnt]>=song[now]) {cd[cnt]-=song[now];dfs(now+1,x+1);cd[cnt]+=song[now];}
    else 
        if (cnt<m&&cd[cnt+1]>=song[now]) {cnt++;cd[cnt]-=song[now];dfs(now+1,x+1);cd[cnt]=t;cnt--;}
    dfs(now+1,x);
}

int main()
{
    scanf("%d%d%d",&n,&t,&m);
    for (int i=1;i<=n;i++) scanf("%d",&song[i]);
    for (int i=1;i<=m;i++) cd[i]=t;
    dfs(1,0);
    printf("%d\n",ans);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/dadatu_zhao/article/details/80443300
dfs