第二题
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<cmath>
#include<ctime>
#include<random>
#define ll long long
#define Fori(x) for(int i=0;i<x;i++)
#define Forj(x) for(int j=0;j<x;j++)
using namespace std;
int n;
int a[111];
int b[111];
int dp[111][10011];
int main()
{
Fori(111)
Forj(10011)
dp[i][j] = -100000000;
dp[0][0] = 0;
scanf("%d",&n);
Fori(n)
scanf("%d",&a[i]);
Fori(n)
scanf("%d",&b[i]);
for(int i=0;i<=n;i++)
{
for(int j=n;j>=1;j--)
{
for(int k=10000;k>=b[i];k--)
{
dp[j][k] = max(dp[j][k],dp[j-1][k-b[i]]+a[i]);
}
}
}
int sum = 0;
int ans = 0;
for(int i=0;i<n;i++) sum+=a[i];
sort(b,b+n);
int tmp = 0;
for(int i=n-1;i>=0;i--)
{
tmp+=b[i];
if(sum<=tmp)
{
ans = n-i;
break;
}
}
cout<<ans<<" ";
int ans2 = 10000000;
for(int i=sum;i<=10000;i++)
ans2 = min(ans2,sum - dp[ans][i]);
cout<<ans2<<endl;
return 0;
}