SRM593 Div1Medium MayTheBestPetWin

来源:互联网 发布:暴力蟆蛤不可取知乎 编辑:程序博客网 时间:2024/06/05 11:50

【分析】
这道题是一道dp题,不过这个公式还是比较好推的。

max(iSbiiTai,iTbiiSai)

=max(i<=n1i=0biiT(ai+bi),iT(ai+bi)i<=n1i=0ai)

那么最后的答案只与suma和sumb,(a+b)有关。
考虑dp。

【代码】

#include <bits/stdc++.h>using namespace std;#define M 55int c1,c2,mx,ans;int dp[1000005];int a[M],b[M];int n;int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++){        scanf("%d",&a[i]);        c2+=a[i];    }    for(int i=1;i<=n;i++){        scanf("%d",&b[i]);        c1+=b[i];    }    mx=ans=c1+c2;    dp[0]=1;    for(int i=1;i<=n;i++){        int sum=a[i]+b[i];        for(int j=mx-sum;j>=0;j--)dp[sum+j]|=dp[j];    }    for(int i=0;i<=mx;i++){        if(!dp[i])continue;        ans=min(ans,max(c1-i,i-c2));    }    printf("%d\n",ans);    return 0;}
2 0
原创粉丝点击