【APIO2013】机器人

【BZOJ3205】【UOJ107】【APIO2013】机器人 【题目链接】BZOJUOJ【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h> using namespace std; #define MAXN 505 #define MAXC 10 #define MAXV 1000005 #define MAXQ 300005 #define INF 1e9 //0 - up; 1 - right; 2 - do... 阅读详情

时间限制 : 40000 MS 空间限制 : 165536 KB

问题描述

VRI(Voltron机器人学会)的工程师建造了n个机器人。任意两个兼容的机器人站在同一个格子时可以合并为一个复合机器人。

我们把机器人用1至n编号(1<=n<=9)。如果两个机器人的编号是连续的,那么它们是兼容的,可以合并成一个复合机器人。最初这n个机器人各自都只有唯一的编号。而一个由两个或以上的机器人合并构成的复合机器人拥有两个编号,分别是构成它的所有机器人中最小和最大的编号。

例如,2号机器人只可以与1号或3号机器人合并。若2号机器人与3号机器人合并,可构成编号为2-3的复合机器人。如果编号为2-3的复合机器人与编号为4-6的复合机器人合并,可构成编号为2-6的复合机器人。当所有机器人合并以后则构成1-n复合机器人。

工程师把这n个机器人放在了一个封闭的房间中,房间四周均是墙。该房间被划分成w*h个方格。有些方格有障碍物,机器人不可经过或停留;其余方格允许多个机器人停留,同时允许机器人经过。任何时候一个机器人只占用一个方格。初始时刻,所有机器人均在不同的方格中。

这些原始的机器人不会自发地移动。它们只有被工程师沿x轴或y轴推动后,才会沿推动的方向不断向前直线移动,直至碰到障碍物或墙停止移动。停止移动后,它会扫描当前的格子是否存在可以与它合并的机器人,如果有,则合并并继续检查,直至不能再合并为止。工程师只能沿水平向左、水平向右、竖直向上、竖直向下四个方向推动机器人,并且,在机器人尚未停止移动时,不允许推动其它机器人,因此任何时刻,房间中都只能有一个机器人移动,为了帮助机器人转向,工程师在一些格子中放置了转向器。具体地说,转向器分为顺时针转向器(右转器)和逆时针转向器(左转器),顺时针转向器可以使到达该格子的机器人沿顺时针方向转向90度;逆时针转向器可以使到达该格子的机器人沿逆时针方向转向90度。

现在,我们将告诉你初始时刻房间内的信息。请你计算工程师最少共计需要推动机器人多少次,才能把所有的 n个机器人全部合并(如果可能的话)。

输入格式

输入的第 1行包含 3个整数 n、w和 h,用空格隔开。 接下来的 h行描述初始时刻房间内的信息,每行包含w个字符。这w* h
字符中每一个表示房间中的一个格子,意义如下: ‘ 1’至‘9’:表示该方格中有一个机器人,编号为这个数字; ‘ x’:表示该方格有障碍物;
‘ A’:表示该方格中有一个逆时针转向器; ‘ C’:表示该方格中有一个顺时针转向器; ‘ .’:表示该方格为空地。

输出格式

输出仅一个整数,表示最少需要推动的次数。 若不能使所有机器人全部合并,输出-1。

样例输入

4 10 5
1………
AA…x4…
..A..x….
2….x….
..C.3.A…

样例输出

5

提示

样例解释: 第一步:向右推动3号机器人,当它碰到转向器后会向上继续移动,直至碰到墙壁停止移动。
第二步:向上推动4号机器人,当它碰到墙壁后停止移动,与3号机器人合并,构成3-4号机器人
第三步:向上推动2号机器人,当它碰到转向器后会向左移动,由于左侧为墙壁,故停留在原地。
第四步:向右推动2号机器人,由于它在一个转向器上,故它会向上移动,直至碰到墙壁停止移动,与1号机器人合并,构成1-2号机器人。
第五步:向左推动3-4号机器人,当它碰到墙壁后停止移动,与1-2号机器人合并,构成1-4号机器人。

数据范围

2<=n<=9,2<=w<=500且2<=h<=500

题解

一道斯坦纳树好题。特殊点数目很少,特殊点的连接变为了特殊点的移动而已。
本题必须要标号相邻的特殊点才能合并,因此设状态时不能再使用状态压缩。类比区间合并的状态,我们设状态:f[l][r][x][y]f[l][r][x][y],表示编号从l到r的机器人在(x,y)处合并的最优值。因此有转移方程:

f[l][r][x][y]=min(f[l][r][x][y],f[l][t][x][y]+f[t+1][r][x][y])f[l][r][x][y]=min(f[l][r][x][y],f[l][t][x][y]+f[t+1][r][x][y])
f[l][r][tx][ty]=min(f[l][r][tx][ty],f[l][r][x][y]+1)f[l][r][tx][ty]=min(f[l][r][tx][ty],f[l][r][x][y]+1)
前者直接区间合并,后者在SPFA中实现。
由于用到了SPFA转移状态,且本题机器人移动的方式十分特殊,因此我们需要处理处每个格子往四个方向出发到达的位置。我们用DFS对其进行处理,但复杂度爆炸。我们发现很多点最终的状态都是相同的(因为机器人一口气走到底),因此可以用记忆化剪枝,特判一下转向器的情况。
然而这样以后还是过不了本题,因为会卡SPFA。这里用到了一个特殊的优化,我们按ff值的大小对状态排序(推荐桶排序)后放入队列q1中,松弛扩展出的点放入q2q2,这样两个队列中的值都是由小到大排列的(有优先队列的功效),每次松弛时从两个队列前端取出最小的一个值。这样避免了很多重复的讨论。
更多细节见代码。

代码

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
typedef pair<int,int> pii;
const int inf=1e9;
int n,h,w,ans=inf,tot,maxx,cnt[505*505];
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
int f[10][10][505][505];
pii v[505*505],q[505*505],map[505][505][4];
bool flag[505][505][4],mark[505][505];
char G[505][505];
queue<pii> q1,q2;
pii DFS(int x,int y,int z)
{
    if(flag[x][y][z]) return map[x][y][z];
    flag[x][y][z]=true;
    int i=z;
    if(G[x][y]=='A') i=(i+3)%4;
    else if(G[x][y]=='C') i=(i+1)%4;
    int tx=dx[i]+x,ty=dy[i]+y;
    if(tx>=1&&tx<=h&&ty>=1&&ty<=w&&G[tx][ty]!='x') map[x][y][z]=DFS(tx,ty,i);
    else map[x][y][z]=make_pair(x,y);
    return map[x][y][z];
}
void spfa(int l,int r)
{
    for(int i=0;i<=maxx;i++) cnt[i]=0;
    for(int i=1;i<=tot;i++) cnt[f[l][r][v[i].first][v[i].second]]++;
    for(int i=1;i<=maxx;i++) cnt[i]+=cnt[i-1];
    for(int i=tot;i;i--) q[cnt[f[l][r][v[i].first][v[i].second]]--]=v[i];
    for(int i=1;i<=tot;i++) q2.push(q[i]);
    while(!q2.empty()||!q1.empty())
    {
        int x,y;
        if(q1.empty()) x=q2.front().first,y=q2.front().second,q2.pop();
        else if(q2.empty())
        {
            x=q1.front().first,y=q1.front().second;
            q1.pop(),mark[x][y]=false;
        }
        else if(f[l][r][q2.front().first][q2.front().second]<f[l][r][q1.front().first][q1.front().second])
        {
            x=q2.front().first,y=q2.front().second,q2.pop();
        }
        else
        {
            x=q1.front().first,y=q1.front().second;
            q1.pop(),mark[x][y]=false;
        }
        for(int i=0;i<4;i++)
        {
            int tx=map[x][y][i].first,ty=map[x][y][i].second;
            if(f[l][r][x][y]+1<f[l][r][tx][ty])
            {
                f[l][r][tx][ty]=f[l][r][x][y]+1;
                if(!mark[tx][ty]) mark[tx][ty]=true,q1.push(make_pair(tx,ty));
            }
        }
    }
}
int main()
{
    memset(f,0x3f,sizeof(f));
    scanf("%d%d%d",&n,&w,&h);
    for(int i=1;i<=h;i++) scanf("%s",G[i]+1);
    for(int i=1;i<=h;i++)
        for(int j=1;j<=w;j++)
            if(G[i][j]>=48&&G[i][j]<=57) f[G[i][j]-48][G[i][j]-48][i][j]=0;
    for(int i=1;i<=h;i++)
        for(int j=1;j<=w;j++)
            for(int k=0;k<4;k++)
                if(!flag[i][j][k]) map[i][j][k]=DFS(i,j,k);
    for(int k=1;k<=n;k++)
        for(int i=1;i+k-1<=n;i++)
        {
            int j=i+k-1;tot=maxx=0;
            for(int x=1;x<=h;x++)
                for(int y=1;y<=w;y++)
                {
                    for(int t=i;t<j;t++)
                        f[i][j][x][y]=min(f[i][j][x][y],f[i][t][x][y]+f[t+1][j][x][y]);
                    if(f[i][j][x][y]<inf) maxx=max(f[i][j][x][y],maxx),v[++tot]=make_pair(x,y);
                }
            spfa(i,j);
        }
    for(int i=1;i<=h;i++)
        for(int j=1;j<=w;j++) ans=min(ans,f[1][n][i][j]);
    if(ans==inf) puts("-1");
    else printf("%d\n",ans);
    return 0;
}
动态知识图谱构建:从本体论到工程实践 知识图谱作为语义网和人工智能领域的核心技术,旨在通过结构化的方式表示和组织知识。其核心原理在于将实体、概念及其关系建模为图结构,从而支持复杂的语义推理和关联查询。这一技术为机器理解数据间的深层联系提供了基础,在智能推荐、企业知识管理和学术研究等领域具有重要价值。通过结合自然语言处理(NLP)和图数据库技术,系统能够从非结构化数据中自动抽取知识,并构建动态演化的认知网络。本文以“本体论章鱼”项目为例,探讨了如何实现从静态本体到动态知识网络的范式转变,并详细解析了其分布式感知、适应性学习的架构设计,为构建灵活可 阅读详情

相关推荐

全志T133-s3(Tina Linux)下RTL8723DS WiFi驱动移植与调试实战

本文详细介绍了在全志T133-s3平台(Tina Linux)上移植RTL8723DS WiFi驱动的完整流程,包括硬件连接、驱动源码获取、内核配置、系统适配、设备树配置以及常见问题排查。通过实战案例,帮助开发者快速解决SDIO接口通信、固件加载、电源管理等关键问题,实现稳定的WiFi功能。

weixin_30505225的博客 507

[APIO2013]机器人(DP+SPFA最短路)

shortest path

255

KEIL 5.38如何手动安装ARM Compiler V5?完整配置流程分享

本文详细介绍了在KEIL 5.38环境下手动安装和配置ARM Compiler V5(AC5)的完整流程,解决历史遗留项目的兼容性问题。从获取安装包、环境变量设置到KEIL集成配置,逐步指导开发者完成AC5的部署,并提供了常见错误排查和性能优化建议,帮助开发者高效维护基于C编译器的老项目。

weixin_29168813的博客 629

P3640 [APIO2013]出题人 题解

一道神仙图论题,很考验各位对最短路以及染色问题的理解。 首先说明 1 点,实质上神秘问题就是经典的染色问题。 这里首先简要分析一下给出的几个代码的特色: FloydWarshall:稳定的 O(V3)O(V^3)O(V3) 运行。下称 Floyd。 OptimizedBellmanFord:加了优化的 Bellman-Ford,但是只要在每一轮松弛的时候有一个点的 disdisdis 被改变了就会被彻底卡成 O(V2E)O(V^2E)O(V2E),于是负环可以排上用场。下称 Bellman-Ford/B

Plozia 的小窝 430

保姆级教程:SAP ABAPer如何为VF01销售发票和MIRO发票校验配置凭证替代(含AC_DOCUMENT BADI完整代码示例)

本文详细解析了SAP ABAP中通过AC_DOCUMENT BADI实现VF01销售发票和MIRO发票校验的凭证替代技术。从技术选型到BADI实施步骤,再到核心逻辑代码示例,为ABAP开发者提供了一套完整的解决方案,帮助应对财务部门复杂的业务需求。

weixin_30421809的博客 354

【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格

数据下载地址:https://www.kaggle.com/datasets/andradaolteanu/gtzan-dataset-music-genre-classification/data背景音乐。专家们长期以来一直在尝试理解声音以及是什么使一首歌曲与另一首不同。如何可视化声音。是什么使一个音调与另一个不同。这个数据集希望能提供实现这些目标的机会。内容原始流派 - 包含10种流派,每种流派有100个音频文件,每个文件长度为30秒(著名的GTZAN数据集,声音的MNIST)

2145

[APIO2013]机器人

所以说spfa能过真的正常吗?

StaroForgin的博客 238

YOLOv11改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进

Hello,各位读者们好.本文为最新YOLOv11有效涨点专栏目录,YOLOv11以及发布了一个月左右,这个过程中我也是给大家整理了许多的机制,其中包含了C3k2、主干(均支持根据yolov11训练的版本进行二次缩放,全系列都能轻量化)、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。

Snu77的博客 8万+

bzoj 3205: [Apio2013]机器人 斯坦纳树

这道题目应该是比较明显的斯坦纳树吧。        令f[l][r][x][y]表示将编号l~r的机器人合并到(x,y)的最小代价,那么就有转移:       1. f[l][r][x][y]=min{f[l][k][x][y]+f[k+1][r][x][y]}       2. f[l][r][x1][y1]=min{f[l][r][x][y]+1},满足将(x,y)往某一个方向推之后会到

lych的博客 2224

DSI3协议介绍

分布式系统接口(DSI)是一种通用且功能强大的总线协议,旨在将多个遥感器和执行器设备互连到中央控制模块。该网络的主要目标应用是汽车安全系统。这种应用的一些特点是需要低成本、高鲁棒性、中速互连,仅限于两根导线。此外,它必须具有故障安全性、确定性和良好的EMC特性。即使具有所有级别的智能和可编程性的设备都可以连接到网络,远程设备也必须能够通过简单的状态机实现。由于模块尺寸非常重要,因此中央模块和远程单元中的最小组件至关重要。

汽车电子软件领域知识分享 1万+

OTA 升级失败/回滚策略设计:打造安全可靠的双分区/断点续传/签名校验方案

双分区机制(A/B Partitioning)是OTA升级的“保险箱”。简单来说,设备存储分为两个分区:A分区(当前运行)和B分区(备用)。升级时,新固件写入B分区,A分区保持不变。如果升级成功,系统切换到B分区运行;如果失败,设备直接回滚到A分区,完全不受影响。这就像玩游戏存档:你打Boss前存了个档,万一挂了还能读档重来。双分区就是设备的“读档”机制,避免了变砖的尴尬。以Android设备为例,Google从Android 7.0开始强制引入A/B分区机制(Seamless Updates)。

大模型大数据攻城狮的专栏 1235

3205: [Apio2013]机器人

3205: [Apio2013]机器人 Time Limit: 15 Sec  Memory Limit: 128 MB Submit: 525  Solved: 131 [Submit][Status][Discuss] Description VRI(Voltron机器人学会)的工程师建造了 n个机器人。任意两个兼容的机器人站在同一个格子时可以合并为一个复合机器人。我们把机器人用

CRZbulabula的博客 9353

C#上位机案例:西门子S7协议通信+实时曲线显示(WinForm+ZedGraph)

创建/// PLC数据模型(对应DB1块)/// 采集时间(用于曲线的X轴)set;/// 温度值(℃)set;/// 压力值(MPa)set;/// PLC通信状态set;西门子S7协议通信和实时曲线显示,也是工控现场最常见的场景之一。整个开发过程的关键不在于“写出代码”,而在于“写出符合工控场景的稳定代码”——比如解耦通信逻辑与界面逻辑、处理跨线程问题、限制数据点数量、释放资源等。新手在学习时,建议先跟着步骤搭建好环境,跑通基础功能,再逐步尝试进阶优化。需要注意的是,工控上位机的核心是。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1343

[APIO 2013] 机器人(斯坦纳树) | 错题本

文章目录题目分析代码 题目 [APIO 2013] 机器人 分析 先记搜出每个格子往上下左右推一下能滑到哪里。然后类似于斯坦纳树,定义 dp[l][r][x][y]dp[l][r][x][y]dp[l][r][x][y] 表示把 l∼rl \sim rl∼r 的所有机器人搞到 (x,y)(x, y)(x,y) 合并的最小代价,区间 DP 外加四联通的转移,一种转移情况是 dp[l][m][x][y]+dp[m+1][r][x][y]dp[l][m][x][y] + dp[m + 1][r][x][y]dp[

ixRic 290

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【BZOJ】【3205】【APIO2013】机器人robot

斯坦纳树   好神啊……Orzzyf &&PoPoQQQ   为啥跟斯坦纳树扯上关系了?我想是因为每个点(robot)都沿着树边汇到根的时候就全部合起来了吧= =这个好像和裸的斯坦纳树不太一样,那个是无向最小生成树,这个是有向图……   引用题解: 令f[l][r][i][j]表示在点(i,j)将编号在[l,r]区间内的机器人全部合并的最小推动次数 则有动规方...

weixin_30498807的博客 1560

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

BZOJ 3205 [Apio2013]机器人 斯坦纳树

题目大意:

YihAN_Z 1505

[Bzoj3205][Apio2013]机器人(斯坦纳树)(bfs)

3205: [Apio2013]机器人 Time Limit:15 SecMemory Limit:128 MBSubmit:977Solved:230[Submit][Status][Discuss] Description VRI(Voltron机器人学会)的工程师建造了 n个机器人。任意两个兼容的机器人站在同一个格子时可以合并为一个复合机器人...

weixin_30580341的博客 128

P3638 [APIO2013]机器人

题目链接 题目描述 VRI(Voltron 机器人学会)的工程师建造了 nnn 个机器人。任意两个兼容的机 器人站在同一个格子时可以合并为一个复合机器人。 我们把机器人用 111 至 nnn 编号(n≤9n ≤ 9n≤9)。如果两个机器人的编号是连续的,那 么它们是兼容的,可以合并成一个复合机器人。最初这 nnn 个机器人各自都只有唯 一的编号。而一个由两个或以上的机器人合并构成的复合机器人拥有两个编号, 分别是构成它的所有机器人中最小和最大的编号。 例如,222 号机器人只可以与 111 号或 333 号

sky123博客 469

【题解】APIO2013机器人

  其实这题前前后后的思考时间加起来应该有两天之久了,dp状态,转移方式等等都还是比较好想,然而左看右看觉得spfa复杂度未免太爆炸……然后选择看了一篇题解,发现在多重优化之下,其实是可以过的……   首先建立状态,这个应该比较明显:\(f[l][r][x][y]\) 代表合并完区间 \(l\) ~\(r\) 之后,机器人停在 \(x,y\) 处所需要的最少移动次数。转移状态即为:   \(f...

weixin_30548917的博客 151

[APIO2013]机器人(斯坦纳树)

题目描述 VRI(Voltron 机器人学会)的工程师建造了 n 个机器人。任意两个兼容的机 器人站在同一个格子时可以合并为一个复合机器人。 我们把机器人用 1 至 n 编号(n ≤ 9)。如果两个机器人的编号是连续的,那 么它们是兼容的,可以合并成一个复合机器人。最初这 n 个机器人各自都只有唯 一的编号。而一个由两个或以上的机器人合并构成的复合机器人拥有两个编号, 分别是构成它的所有机器人...

weixin_34062329的博客 196

【bzoj3205】[Apio2013]机器人 斯坦纳树

f[l][r][i][j]表示把l到r的机器人合并,停在(i,j)点的最小步数 f[l][r][i][j]=min{f[l][k][i][j]+f[k+1][r][i][j]} f[l][r][i][j]=min{f[l][r][i'][j']+1} 记忆化搜索一下每个点从每个方向出发会走到哪里 注意,题目里可能出现环,要特判 spfa要加上一个优化才能通过 先把初始队列中的点按距离排

Oxer的专栏 1245

BZOJ3205: [Apio2013]机器人

卡常卡了好久qwq可以先用记忆化搜索搜出每个位置往四个方向走会走到哪,注意判走到已经走过的地方避免死循环 f[l][r][i][j]表示在(i,j)合成机器人l~r的最小花费 有 f[l][r][i][j]=min f[l][r][di][dj]+1 (di,dj)->(i,j) f[l][r][i][j]=min(f[l][k][i][j]+f[k+1][j][i][j]) 对于第二个转

L_0_Forever_LF的专栏 711

BZOJ 3205 Apio2013 机器人 斯坦纳树

题目大意:给定一张地图,一些地方有障碍物,有k 令f[l][r][i][j]表示在点(i,j)将编号在[l,r]区间内的机器人全部合并的最小推动次数 则有动规方程组: f[l][r][i][j]=min{f[l][r][_i][_j]+1} ( (_i,_j)->(i,j) ) f[l][r][i][j]=min(f[l][temp][i][j]+f[temp+1][r][i][j]) (

世界 3783
上一篇: 【JLOI2015 DAY2】通道连接
下一篇: 【Usaco Mar08 Gold】土地购买
StrideTG
博客等级 码龄9年 4粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值