题目传送门
题意都能读懂,下面直接讲思路。
思路
本来想用一些奇妙的算法,但看到数据 1 ≤ n ≤ 360 1 \leq n \leq 360 1≤n≤360,直接用暴力来解决这个问题即可。因为只有两个人在分这个披萨,所以每人分到 18 0 ∘ 180^\circ 180∘ 是最优的,那么答案一定要往这方面靠,可以用三重循环来枚举所有可能出现的方案并依次比较求出离每人分到 18 0 ∘ 180^\circ 180∘ 这一最优解最近的那个方案,随时记录二者之差,最后处理一下即可。
循环具体看代码。
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n,f[400];
int t=400,tot;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&f[i]);
if(n==1){
printf("360\n");
return 0;
}//特判, 只分成一份一定有一个人拿了全部,另一个人什么都没有
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++){//前两重循环枚举一个人所能分到的披萨度数的所有方案
tot=0;//tot则是用于累加上面求出的每一种方案所能得到的度数
for(int k=i;k<=j;k++)//枚举每种方案
tot+=f[k],t=min(t,abs(tot-180));//累加并比较和最优解的距离
}
printf("%d\n",t*2);//因为只求了一个人的,所以最后的结果要*2
return 0;
}
完结撒花~~

这篇博客介绍了一种使用暴力法解决披萨切分问题的方法,通过三重循环枚举所有可能的切分方案,并找出与每人分得180度最接近的方案,适用于n≤360的场景。
214

被折叠的 条评论
为什么被折叠?



