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;
}