汉诺塔 (C#230)
来源:互联网 发布:网络监控几类线 编辑:程序博客网 时间:2024/05/01 11:17
题意:普通的汉诺塔,但是从一个柱子向另一个柱转移一个盘子会有一个权值。
求把N个盘子从第一个柱子转移到第三根柱上所需的最小权值和。
思路:用三维数组dp[i][j][k]表示把i个盘子从柱子j转移到k所需最小权值和。
从柱子j转移到k有两种转移法(柱子标号0~2,所以3-j-k表示除jk外另一根柱子):
(1) 上面的i-1个盘j-->3-j-k,最下面的盘j-->k,上面i-1个盘3-j-k-->k
(2)上面的i-1个盘j-->k,最下面的盘j-->3-j-k,上面的i-1个盘k-->j,最下面的盘3-j-k-->k,上面的i-1个盘j-->k
dp[i][j][k]选取上面两种情况中更小的一种即可。
网址:http://codeforces.com/contest/392/problem/B
#include<iostream>using namespace std;long long dp[42][4][4];int n,a[3][3];int main(){int i,j,k;for (i=0;i<3;i++) for (j=0;j<3;j++) cin>>a[i][j]; cin>>n;for(i=1;i<=n;i++) for(j=0;j<3;j++) for(k=0;k<3;k++) if(j!=k)dp[i][j][k]=min(dp[i-1][j][3-j-k]+a[j][k]+dp[i-1][3-j-k][k],dp[i-1][j][k]+a[j][3-j-k]+dp[i-1][k][j]+a[3-j-k][k]+dp[i-1][j][k]);cout<<dp[n][0][2]<<endl;}
0 0
- 汉诺塔 (C#230)
- 汉诺塔(C#版)
- 马牛的C#学习(第六天)-实践!用C#解决汉诺塔问题
- C#时钟控件 (C# Clock Control)
- C#高级(九)C#数据结构 , 集合
- C#基础谈(一)---- 认识C#
- C#编程之C#基础(一)
- C#编程之C#基础(二)
- C#编程之C#基础(三)
- C#编程之C#基础(四)
- C#编程之C#基础(五)
- C#编程之C#基础(六)
- C#编程之C#基础(七)
- C#编程之C#基础(七)
- C#基础知识整理:C#基础(1)
- C#基础知识整理:C#基础(2)
- C#反射对象(C# Dynamic)
- C#学习篇(四)C#迭代器
- 根据当前日期,计算一个人的年龄
- UVa 350 伪随机数
- SAP EXCEL 上传和下载
- 视频编解码学习(2)——数字视频
- buffer cache实验5-latch:cache buffers chain
- 汉诺塔 (C#230)
- webapp系列开发之二:Dreamweaver CS6配置Phonegap运行环境介绍
- UITabBarController+UINavigationController 实现自定义TabBar样式
- 运行情况如何?
- CheckBoxList和RadioButtonList的使用(后台取值和赋值)
- 服务器比较
- SDL Game Development-第四章(1)-移动
- C++实现2个类互相指向对方
- 希尔排序