有大佬有时间帮蒟蒻查下代码吗 很短的
查看原帖
有大佬有时间帮蒟蒻查下代码吗 很短的
323744
littlecyber楼主2020/8/20 17:49

就是二维背包的思路,死活不知道哪里出错了

#include <bits/stdc++.h>
#define maxn 100+10
#define maxm 8000+10
using namespace std;
bool dp[maxn][maxm];
int a[2*maxn];
int main()
{
    int n,sum=0;
    cin>>n;
    for(int i=1;i<=n;i++){cin>>a[i];sum+=a[i];}
    //memset(dp,false,sizeof(dp));
    dp[0][0]=1;
    for(int i=1;i<=n;i++)
        for(int k=n/2;k>=1;k--)
            for(int j=sum/2;j>=a[i];j--)
                dp[k][j]=dp[i][j]|dp[k-1][j-a[i]];
    for(int j=sum/2;j>=0;j--)if(dp[n/2][j]){cout<<j<<endl<<sum-j;break;}
    return 0;
}
2020/8/20 17:49
加载中...