codeforces392B
CF392B Tower of Hanoi
题意翻译
河内塔是一个众所周知的数学难题。它由三根杆和一些可以滑动到任何杆上的不同尺寸的圆盘组成。难题从一个整齐的杆中开始,按照尺寸从小到大的顺序排列,最小的位于顶部,从而形成一个圆锥形状。难题的目标是将整个杆移动到另一个杆,遵循以下简单规则:
- 一次只能移动一个圆盘。
- 每一步都是从其中一个杆取出上面的圆盘并将它放在另一个杆的顶部,即只有当圆盘是杆中最上面的圆盘时才能移动圆盘。
- 没有圆盘可能放置在较小的圆盘顶部。
有了三个圆盘,这个难题可以通过七个步骤解决。解决河内难题所需的最小移动次数是2^n - 1,其中n是圆盘的数量。 SmallY的难题非常类似于着名的河内塔。在河内之谜游戏中,你需要以最少的动作来解决难题,在SmallY的谜题中,每一个动作都需要花费一些钱,而且你需要解决同样的难题,但要花费最少。 在SmallY的难题开始时,所有的n个磁盘都在第一根杆上。将圆盘从杆i移动到杆j需要花费t[i,j]个金钱单位。(1 <= i,j <= 3).这个难题的目标是将所有的圆盘移动到第三个杆上。在这个问题中给出矩阵t和整数n。您需要计算解决SmallY难题的最小成本,其中包含n个圆盘。 输入输出格式输入格式:前三行中的每一行都包含三个整数 - 矩阵t。第i行第j个整数为t[i,j](1 <= t[ij] <= 10000; i≠j )。以下行包含一个整数n表示圆盘数量(1 <= n <= 40)。当i满足: (1 <= i <= 3), t[i,i] = 0. 输出格式:打印一个整数 - 解决SmallY难题的最低成本。
sol:dp[i][j][k]表示i个盘子,从j移到k,有两种方法,一种是传统的,另一种比较NB
例如从1到3 n个:1->2(n-1),1->3最大盘,2->3(n-1)
或者
1->3(n-1),1->2最大盘,3->1(n-1),2->3最大盘,1->3(n-1)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=; bool f=; char ch=' ';
while(!isdigit(ch)) {f|=(ch=='-'); ch=getchar();}
while(isdigit(ch)) {s=(s<<)+(s<<)+(ch^); ch=getchar();}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<) {putchar('-'); x=-x;}
if(x<) {putchar(x+''); return;}
write(x/); putchar((x%)+'');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
int n;
ll tim[][],dp[][][];
int main()
{
// freopen("data.in","r",stdin);
int i,j,k;
memset(dp,,sizeof dp);
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
R(tim[i][j]); dp[][i][j]=;
}
}
R(n);
for(i=;i<=n;i++)
{
for(j=;j<=;j++) for(k=;k<=;k++) if(j!=k)
{
int oo=-j-k;
dp[i][j][k]=min(dp[i][j][k],dp[i-][j][oo]+tim[j][k]+dp[i-][oo][k]);
dp[i][j][k]=min(dp[i][j][k],dp[i][j][oo]+dp[i-][oo][j]+tim[oo][k]+dp[i-][j][k]);
dp[i][j][k]=min(dp[i][j][k],dp[i-][j][k]+tim[j][oo]+dp[i-][k][j]+tim[oo][k]+dp[i-][j][k]);
}
}
Wl(dp[n][][]);
return ;
}
codeforces392B的更多相关文章
随机推荐
- Admui相关第三方插件
ace 版本:1.2.3au 官网:https://github.com/ajaxorg/ace-builds/ 许可:BSD 依赖:无 DataAPI:data-pulgin="ace&q ...
- Myatis之bind标签
myBatis的bind的标签,一般的用法都是 <if test="name!= null and name!= '' "> <bind name="u ...
- Myeclipse debug 调式java 报错,留做后面解决!
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT( ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 视图模板页
https://www.cnblogs.com/xlhblogs/archive/2013/06/09/3129449.html MVC Razor模板引擎 @RenderBody.@RenderPa ...
- 【原创】大叔经验分享(89)docker启动openjdk执行jmap报错
docker启动openjdk后,可以查看进程 # docker exec -it XXX jps 10 XXX.jar 可见启动的java进程id一直为10,然后可以执行jvm命令,比如 # doc ...
- js原生方法的重写
讲干货,不啰嗦,通过prototype可以获取到JavaScript的原型对象,进而可以在对象原型上添加新的属性和方法,当该方法与原方法名称一样时会覆盖原方法既:重写,当不一样时既:添加 如:实现数组 ...
- SMTP命令
SMTP(Simple Mail Transfer Protocol)简单邮件传输协议 Basic Commands: HELO(Hello):标识用户身份 MAIL FROM:发件人地址 RCPT ...
- process exporter 配置项解释
process exporter在prometheus中用于监控进程,通过process exporter,可从宏观角度监控应用的运行状态(譬如监控redis.mysql的进程资源等) 配置文件样例如 ...
- Django中使用xadmin作为后台管理页面
xadmin后台管理 安装:luffy虚拟环境下 # >: pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 ...
- python获取本机的IP
转载:https://www.cnblogs.com/whu-2017/p/8986842.html 方法一: 通常使用socket.gethostbyname()方法即可获取本机IP地址,但有时候获 ...