示例是对的,然而提交就错了
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int T,ans[100],cnt[100],k;
void solve()
{
int dp[51]={0};
vector<int>v;
v.push_back(-1);
int n,t,i,j,temp;
cin>>n>>t;
for(i=1;i<=n;i++)
{
cin>>temp;
v.push_back(temp);
}
sort(v.begin(),v.end());
int sum=0,N=0;
for(i=1;i<=n;i++)
{
if(sum+v[i]>t)
break;
sum+=v[i];
N++;
}
cnt[k]=N;
for(i=1;i<=n;i++)
{
for(j=N;j>=1;j--)
{
if(dp[j-1]+v[i]>dp[j]&&dp[j-1]+v[i]<t)
dp[j]=dp[j-1]+v[i];
}
}
ans[k]=dp[N]+678;
}
int main()
{
cin>>T;
for(k=0;k<T;k++)
{
solve();
}
for(k=0;k<T;k++)
{
if(k>0)
printf("\n");
printf("Case %d: %d %d",k+1,cnt[k]+1,ans[k]);
}
return 0;
}