背包问题,只不过有了多个背包。
虽然代码简单,但也要看懂。
#include<cstdio>
#include<iostream>
#include <queue>
#include <cmath>
#include <algorithm>
using namespace std;
int f[21][21],T[21];
int main()
{
//freopen("rockers.in","r",stdin);
//freopen("rockers.out","w",stdout);
int n,t,m;
cin>>n>>t>>m;
for(int i=1;i<=n;i++)
cin>>T[i];
for(int i=1;i<=n;i++)
for(int m1=m;m1>=1;m1--)
for(int t1=t;t1>=T[i];t1--)
{
f[m1][t1]=max(f[m1][t1],max(f[m1-1][t]+1,f[m1][t1-T[i]]+1));
}
cout<<f[m][t]<<endl;
return 0;
}