P3878 [TJOI2010]分金币
题目链接
题意分析
这道题正解好像是折半状压 但是俺就是喜欢模拟退火
每一次随机的话 就是交换两个数的位置 然后比较前一半和后一半
CODE:
#include
#define INF 0x7fffffff
#define N 2010
using namespace std;
int T,n;
long long ans;
long long num[N];
long long getans()
{
long long sum1=0,sum2=0;
int mid=(1+n)>>1;
for(int i=1;i<=mid;++i) sum1+=num[i];
for(int i=mid+1;i<=n;++i) sum2+=num[i];
return abs(sum1-sum2);
}
void SA()
{
for(double Te=3872;Te>1e-10;Te*=0.972)
{
int x=rand()%n+1,y=rand()%n+1;
swap(num[x],num[y]);
long long tmp=getans();
if(tmp