SRM593 Div1Medium MayTheBestPetWin

xiaoxiao2021-02-28  56

很显然,此题答案为: 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; }
转载请注明原文地址: https://www.6miu.com/read-81231.html

最新回复(0)