SRM593 Div1Medium MayTheBestPetWin

来源:互联网 发布:亚马逊订单管理 软件 编辑:程序博客网 时间:2024/06/16 14:06

很显然,此题答案为:
max(iSbiiTaiiTbiiSai)
极为max(n1i=0biiT(ai+bi)iT(ai+bi)n1i=0ai)
于是dp求出ai+bi的所有可能和即可
代码如下:

#include<bits/stdc++.h>using namespace std;int a[55],b[55];bool dp[10000005];int main(){    int n,res1=0,res2=0,sum=0,ans=10000005;    scanf("%d",&n);    for(int i=1;i<=n;i++){        scanf("%d",&a[i]);        res1+=a[i];    }    for(int i=1;i<=n;i++){        scanf("%d",&b[i]);        res2+=b[i];        a[i]+=b[i];    }    dp[0]=1;    for(int i=1;i<=n;i++){        sum+=a[i];        for(int j=sum;j>=a[i];j--)            if(dp[j-a[i]])dp[j]=1;    }    for(int i=0;i<=res1+res2;i++){        if(!dp[i])continue;        ans=min(ans,max(res2-i,i-res1));    }    printf("%d\n",ans);    return 0;}