```cpp
#include<bits/stdc++.h>
using namespace std;
int n,a[205],sum=0;
bool f[205][205][205];//表示血值和为j的前i个人中第k个人是否选
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
f[0][0][0]=1;
for(int i=1;i<=n;i++)
for(int j=sum/2;j>0;j--)
for(int k=n/2;k>=1;k--)
f[i][j][k]=f[i-1][j-a[i]][k-1]|f[i-1][j][k];
/*{
if(k>0)
f[i-1][j-a[i]][k-1]=1;
else
f[i-1][j][k]=0;
}*/
for(int j=sum/2;j>0;j--)
if(f[n][j][n/2]==1)
{
cout<<j<<' '<<sum-j;
break;
}
return 0;
}
```
忘插入代码了。。。
by happyzy226 @ 2018-10-06 00:16:54
还有,为啥注释部分会引起停止工作?
by happyzy226 @ 2018-10-06 00:18:03
少年啊,首先你这个f数组可以降维,而且你的血量那一维空间开得不够大
by maniac! @ 2018-10-06 07:26:42
注释里else那部分会引起数组下标出现负数啊
by maniac! @ 2018-10-06 07:28:23
@[喵小皮](/space/show?uid=61185)
请问else中为什么有负数呢,i-1,j,k都不是负数啊
by happyzy226 @ 2018-10-06 19:22:12
k是负数啊……你if(k>0)else不就是k<=0的情况了吗
by maniac! @ 2018-10-06 19:51:23
@[喵小皮](/space/show?uid=61185) 噢,谢谢谢谢
by happyzy226 @ 2018-10-06 21:32:12