Loading...

洛谷P2503 [HAOI2006]均分数据

check评论:0 条 remove_red_eye浏览量:275 change_historyTags:编程学习笔记
作者 : deco date_range日期 : 2018-12-15

模拟退火题目

其实根本不用模拟退火

这道题直接$random\_shuffle$然后计算就行了qwq

#include <bits/stdc++.h>
using namespace std;
int a[25],s[25],n,m,sum;
double f[25],ans=1e10,qwq;
void work() 
{
    memset(f,0,sizeof(f));
    for(int i=1;i<=n;i++) 
    {
        int p=1;
        for(int j=1;j<=m;j++)
        {
            if(f[j]<f[p]) 
            {
                p=j;
            }
        }
        f[p]+=a[i];
    }
    double now=0;
    for(int i=1;i<=m;i++) 
    {
        now+=(f[i]-qwq)*(f[i]-qwq);
    }
    now/=(double)m;
    if(now<ans) 
    {
        ans=now;
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]); 
        sum+=a[i];
    }
    qwq=(double)sum/m;
    while((double)clock()/CLOCKS_PER_SEC<0.5)
    {
        random_shuffle(a+1,a+n+1);
        work();
    }
    printf("%.2lf",sqrt(ans));
}

暂无评论

正在回复给  
去登陆?

   点击刷新验证码

标签云

文章留名