sgu 214


参考题解:http://blog.csdn.net/qq_20118433/article/details/45653577


贴发代码就跑。。。

sgu上的C++编译器开了不稳定的O2优化,
所以我用C++交无限WA on test 16,
用C++_VS提交或改成C语言提交就AC了。。。


感觉不会再爱了。。。。。。


C语言代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>

#define size  256
#define maxl  2005
#define INF  0x3f3f3f3f

char s[size]; int sl;
int w[size][size], fc[size];

char sa[maxl], sb[maxl];
int a[maxl], b[maxl], al, bl;

int f[maxl][maxl],pre[maxl][maxl];

int ma[size], mb[size];
int mina[size], minb[size];

int len;
char ansa[maxl<<1];
char ansb[maxl<<1];

void add(char da,char db)
{
    ansa[len] = da, ansb[len] = db, len++;
}
void dfs(int ta,int tb)
{
    switch(pre[ta][tb])
    {
        case 1: dfs(ta-1,tb), add(sa[ta-1],s[ma[a[ta-1]]]); break;
        case 2: dfs(ta,tb-1), add(s[mb[b[tb-1]]],sb[tb-1]); break;
        case 3: dfs(ta-1,tb-1), add(sa[ta-1],s[b[tb-1]]);   break;
    }
}

int main()
{
    int i, j;

#ifndef ONLINE_JUDGE
    freopen("sgu214.in","r",stdin);
    freopen("sgu214.out","w",stdout);
#endif

    scanf("%s%s%s",s,sa,sb);
    sl = strlen(s), al = strlen(sa), bl = strlen(sb);

    for(i = 0; i < sl; i++) fc[s[i]] = i;    

    for(i = 0; i < al; i++) a[i] = fc[sa[i]];
    for(i = 0; i < bl; i++) b[i] = fc[sb[i]];

    for(i = 0; i < sl; i++)
        for(j = 0; j < sl; j++)
            scanf("%d",&w[i][j]);

    for(i = 0; i < sl; i++)
        for(j = 0; j < sl; j++)
        {
            if(w[i][j] < w[i][ma[i]]) ma[i] = j;
            if(w[i][j] < w[mb[j]][j]) mb[j] = i;
        }        

    for(i = 0; i < sl; i++) 
        mina[i] = w[i][ma[i]], minb[i] = w[mb[i]][i];

    f[0][0] = 0, pre[0][0] = 0; 

    for(i = 1; i <= al; i++)
        f[i][0] = f[i-1][0] + mina[a[i-1]], pre[i][0] = 1;
    for(j = 1; j <= bl; j++)
        f[0][j] = f[0][j-1] + minb[b[j-1]], pre[0][j] = 2;

    for(i = 1; i <= al; i++)
        for(j = 1; j <= bl; j++)
        {
            int t1 = f[i-1][j] + mina[a[i-1]],
                t2 = f[i][j-1] + minb[b[j-1]],
                t3 = f[i-1][j-1] + w[a[i-1]][b[j-1]]; 

            if(t1 <= t2)
                f[i][j] = t1, pre[i][j] = 1;
            else
                f[i][j] = t2, pre[i][j] = 2;

            if(t3 < f[i][j])
                f[i][j] = t3, pre[i][j] = 3;
        }

    printf("%d\n",f[al][bl]);

    dfs(al,bl), puts(ansa), puts(ansb);     

#ifndef ONLINE_JUDGE
    fclose(stdin);
    fclose(stdout);
#endif
    return 0;
}
GA优化K-means是一种利用遗传算法来优化K-means聚类的方法。K-means算法的核心思想是将样本之间的距离作为分类标准,通过选择合适的聚类中心,使得同类别中的样本间距离尽可能小。而GA优化K-means则是通过遗传算法来优化K-means的聚类效果。 在GA优化K-means中,关键的设计要点包括确定聚类数K值、确定初始聚类中心点以及聚类效果的可视化等。聚类数K值的确定是一个重要的优化选项,而GA可以帮助我们找到最优的K值。另外,初始聚类中心点的选择也是一个关键的步骤,GA可以帮助我们找到合适的初始中心点。此外,对于高维数据的可视化也是一个重要的设计要点。最后,多种聚类效果评价指标可以帮助我们评估聚类结果的好坏。 在MATLAB中实现GA优化K-means的操作可以通过实时编辑器自动设置来完成。你可以参考相关的视频教程来了解具体的操作步骤。此外,你还可以通过提取图像数据集的特征,利用K-means进行图像聚类,并利用遗传算法对K-means进行最优K值的搜索,从而自动完成聚类过程。 总之,GA优化K-means是一种利用遗传算法来优化K-means聚类的方法,可以帮助我们找到更好的聚类结果。 #### 引用[.reference_title] - *1* *2* [【GA优化K-means不求人】遗传算法优化Kmeans聚类+MATLAB轻代码](https://blog.csdn.net/gccaizr/article/details/124398030)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [智能优化算法课设-遗传算法搜索kmeans图像聚类最优聚类数k](https://blog.csdn.net/weixin_45988630/article/details/126880187)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值