本题还是比较简单的,所以直接讲思路。
分析
由于保证了各部分的和,所以要想让差尽可能小,必须让两部分尽可能的接近 \(180\),可以想到用三重循环来枚举。我们可以随时记录两大块之差,依次比较即可。
Code
#include<bits/stdc++.h>
using namespace std;
int a[400];
int n,ans=400,s;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
if(n==1)//特判
{
cout<<360;
return 0;
}
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)//前两重循环枚举一个人分到的披萨
{
s=0;
for(int k=i;k<=j;k++)
s+=a[k],ans=min(ans,abs(s-180));//比较
}
cout<<ans*2;//由于只算了一个人,所以最后要乘上2
}