有n堆石头,现在请将它们分成两堆,并要求两堆的重量和尽可能接近,输出两堆石头的重量和,结果按降序排列。
算法:动态规划
#include#include #include #include using namespace std;int main(void){ int n,sum=0; cin>>n; vector f(n); for(int i=0;i >f[i]; sum+=f[i]; } int m=sum/2; vector dp(m+1,0); dp[0]=0; for(int i=0;i =f[i];j--){ dp[j]=max(dp[j],dp[j-f[i]]+f[i]); } int ans=abs(dp[0]-sum),k=0; for(int i=1;i<=m;i++){ if(ans>abs(dp[i]-sum)){ ans=abs(dp[i]-sum); k=i; } } if(sum-dp[k]<=dp[k])cout< <<' '< <