关于不一定装满与恰好装满: http://blog.sina.com.cn/s/blog_150cffdab0102w0g9.html
参考代码:http://blog.csdn.net/acvay/article/details/43601791
我的代码
#include<bits/stdc++.h>
using namespace std;
int n,t;
int dp[20000];
int main()
{
int C;
scanf("%d",&C);
for(int c=1;c<=C;c++)
{
memset(dp,0x8f,sizeof(dp));
scanf("%d %d",&n,&t);
dp[0]=0;
int ccc;
for(int i=1;i<=n;i++)
{
scanf("%d",&ccc);
for(int j=t-1;j>=ccc;j--)
dp[j]=max(dp[j],dp[j-ccc]+1);
}
int ans;
for(int i=ans=t-1;i>=0;i--)
if(dp[i]>dp[ans]) ans=i;
printf("Case %d: %d %d\n",c,dp[ans]+1,ans+678);
}
return 0;
}