70pts求助,dp类型不是bool
查看原帖
70pts求助,dp类型不是bool
1284967
huangxintong楼主2025/8/5 10:04

rt,f[i]][j][k]f[i]][j][k] 表示前 ii 个兵选 jj 个且兵的血量总和不超过 kk 所能达到的最大血量值,不知道哪里错了。

#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;
}
2025/8/5 10:04
加载中...