codeforces 895A Pizza Separation 枚举

codeforces 895A Pizza Separation

题目大意:

  • 分成两大部分,使得这两部分的差值最小(注意是圆形,首尾相连)

思路:

  • 分割出来的部分是连续的,开二倍枚举。
  • 注意不要看成01背包,一定多读题

代码:

#include <bits/stdc++.h>
using namespace std;
int a[800];
int main() {
    int n,minval,sum,tot;
    cin>>n;
    tot=0;
    for(int i=1;i<=n;++i) {
        scanf("%d",&a[i]);
        tot+=a[i];
    }
    for(int i=1;i<=n;++i) {
        a[i+n]=a[i];
    }
    minval=tot;
    for(int i=1;i<=n;++i) {
        sum=0;
        for(int j=i;j<=2*n;++j) {
            if(j-i==n) break;
            sum+=a[j];
            minval=min(abs(tot-2*sum),minval);
        }
    }
    cout<<minval<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/lemonbiscuit/p/7902444.html