Crazy Rows————GCJ 2009 Round2A(简单贪心)

下三角矩阵转换最少步骤

题目:给定一个由0和1组成的矩阵,只允许交换相邻的两行。要把矩阵化为下三角矩阵,即主对角线上方的元素都为0,问至少需要交换几次。(1<=N<=40)

input:3

           001

           100

           010

output:2(1和2先交换,再交换2和3)


思路:先考虑最后形成的下三角矩阵的情形,肯定是第一行第一个数后面的都是0,第二行第二个数后面的都是0,依次类推。

          那么哪几行可以被交换到第一行?

          只要考虑每行最后一个1出现的位置。并找到离第一行最近的一个。交换过来。接下来的以此类推。

         为什么可行?在纸上模拟一下就知道,能交换到第一行的肯定能放到第二行,第三行,反之则不一定。如果有两行同时满足第一行和第二行的要求,先把最靠近的换到第一行,这样至少不会比另一种策略用的步数多。


代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cmath>
#include <queue>
#include <string>
#include <map>
#include <iostream>
using namespace std;

#define INF 1e9+7
#define MAXN 100010

int n;
char a[50];
int b[50];
bool used[50];

int main()
{
    int n;
    scanf("%d",&n);
    getchar();
    for(int i=0;i<n;i++)
    {
        b[i]=-1;
        used[i]=false;
        scanf("%s",a);
        for(int j=n-1;j>=0;j--)
        {
            if(a[j]=='1')
            {
                b[i]=j;
                break;
            }
        }
    }
    int s=0;
    for(int i=0;i<n;i++)
    {
        int ans=-1;
        for(int j=i;j<n;j++)
        {
            if(b[j]<=i){
                ans=j;
                break;
            }
        }
        for(int j=ans;j>i;j--)
        {
            swap(b[j],b[j-1]);
            s++;
        }
    }
    printf("%d\n",s);
}


          

### PSO算法与CNN结合的技术实现 粒子群优化 (Particle Swarm Optimization, PSO) 是一种基于群体智能的全局优化方法,广泛应用于参数调优和其他复杂问题求解场景。卷积神经网络 (Convolutional Neural Network, CNN) 则是一种专门用于处理图像数据的强大深度学习模型。两者的结合可以显著提升模型性能,尤其是在超参数调整、特征提取以及训练过程中的效率改进方面。 #### 结合方式概述 PSO可以通过优化CNN的关键参数来提高其表现力。这些参数通常包括但不限于学习率、正则化系数、滤波器大小以及其他架构设计变量[^1]。具体来说: - **超参数调节**:利用PSO搜索最佳的学习速率和权重衰减因子等配置项。 - **结构优化**:通过编码机制表示不同的层组合形式(例如全连接层数量或者池化操作的选择),从而让PSO决定最优拓扑布局。 - **加速收敛速度**:借助于PSO动态更新权值向量的能力,在一定程度上缓解梯度消失现象并促进更快地达到局部极小值区域附近位置。 以下是关于如何实施这种集成方案的一些指导原则及其资源链接建议列表: #### 实现指南 为了便于理解整个流程,请参阅下面给出的一个简化版Python脚本作为起点。该例子展示了基本框架下如何应用标准版本的PSO去寻找适合特定任务需求的最佳初始化条件集合之一部分代码片段如下所示: ```python import numpy as np from sklearn.model_selection import train_test_split from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Conv2D, Flatten, MaxPooling2D from pyswarms.single.global_best import GlobalBestPSO def cnn_model(params): model = Sequential() num_filters = int(np.round(params[0])) filter_size = tuple(map(int,np.around([params[1], params[2]]))) pool_size = tuple(map(int,np.around([params[3], params[4]]))) model.add(Conv2D(num_filters,filter_size,input_shape=(img_rows,img_cols,1),activation='relu')) model.add(MaxPooling2D(pool_size)) ... return model options = {'c1': 0.5, 'c2': 0.3, 'w':0.9} optimizer = GlobalBestPSO(n_particles=10,dimensions=5,options=options) cost_function = lambda x: evaluate_cnn(x,cnn_model,X_train,y_train,batch_size,epochs) best_cost, best_pos = optimizer.optimize(cost_function,iters=100) ``` 上述程序段定义了一个简单的函数`cnn_model`, 它接受来自PSO个体的位置信息,并据此构建相应的Keras序列型模型实例;接着设置好必要的选项字典后创建了GBest类型的优化类对象;最后指定代价评估逻辑并通过迭代执行寻找到理论上较佳的一组设定数值. #### 推荐资料 对于希望深入研究此主题的研究者而言,这里列举了一些有价值的参考资料供进一步探索之用: - Jang et al., "Hybrid Particle Swarm Optimization and Genetic Algorithm for Feature Selection," IEEE Transactions on Systems Man & Cybernetics Part B-Cybernetics. - Kennedy, James, Russell C. Eberhart, Yuhui Shi. *Swarm Intelligence*. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA ©2001 ISBN:1-55860-595-9 . - Goodfellow Ian , Bengio Yoshua , Courville Aaron . Deep Learning[M]. MIT Press, 2016.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值