rt,f[i]][j][k] 表示前 i 个兵选 j 个且兵的血量总和不超过 k 所能达到的最大血量值,不知道哪里错了。
#include <bits/stdc++.h>
using namespace std;
int f[200][8000];
int a[500];
int main(){
int n;cin>>n;int k = (n+1)/2;int sum =0;
for(int i = 1;i<=n;i++){
cin>>a[i];
sum += a[i];
}
if(n==1){
cout<<0<<' '<<a[1];
return 0;
}
for(int i = 1;i<=n;i++)
for(int j = min(k,i);j>=1;j--)
for(int p = a[i];p<=(sum+1)/2;p++)
f[j][p] = max(f[j][p],f[j-1][p-a[i]]+a[i]);
int ans;
if(n%2==0) ans = f[n/2][sum/2];
else ans = max(f[n/2][sum/2],f[n/2+1][sum/2]);
cout<<ans<<' '<<sum-ans;
return 0;
}