动态规划训练13 [Catch That Cow poj3278]
Catch That Cow
POJ - 3278
这道题我看大家用的方法都是bfs搜索,为什么在我看来这就是一个动态规划的题目啊啊啊啊啊啊啊
dp[x]表示从N出发到x所需要的最小时间
那么得到如下转移方程
如果x < N的话,那么只能通过走路来转移,所以dp[x] = N - x,x <= N时候
而x > N时候,可以通过2种方式来转移
(1)走路转移 dp[x] = dp[x-1] + 1
(2)跳跃加走路转移
当x为偶数的时候
dp[x] = min(dp[x],dp[x/2]+1,dp[x/2+1]+3)
当x为奇数的时候
dp[x] = min(dp[x],dp[(x-1)/2]+2,dp[(x+1)/2]+2)
代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int N,K;
const int MAX = 100005;
int dp[MAX];int main(){cin>>N>>K;for(int i = 0;i <= K;i++){dp[i] = abs((int)(N - i));}for(int i = N+1;i <= K;i++){if(i & 1) // 奇数{dp[i] = min(dp[i],dp[(i-1)/2]+2);dp[i] = min(dp[i],dp[i-1]+1);dp[i] = min(dp[i],dp[(i+1)/2]+2);} else{dp[i] = min(dp[i],dp[i/2]+1);dp[i] = min(dp[i],dp[i-1]+1);dp[i] = min(dp[i],dp[i/2 + 1]+3);}}cout<<dp[K]<<endl;return 0;
}
补充:刚才尝试了一下模拟的方法,确实也行的通,而且代码量不大
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
typedef pair<int,int> P;
const int MAX = 200005;
int used[MAX];
int main(){
int N,K;
cin>>N>>K;
queue<P> Q;
Q.push(make_pair(0,N));
while(!Q.empty()){
P p = Q.front();Q.pop();
if(p.second == K){
cout<<p.first<<endl;
break;
}
if(p.second <= K + 2 && !used[p.second + 1]){
Q.push(make_pair(p.first+1,p.second + 1));
used[p.second + 1] = 1;
}
if(p.second >= 1 && !used[p.second - 1]){
Q.push(make_pair(p.first+1,p.second - 1));
used[p.second - 1] = 1;
}
if(p.second * 2 <= 2* K && !used[p.second * 2]){
Q.push(make_pair(p.first+1,p.second * 2));
used[p.second * 2] = 1;
}
}
return 0;
}
动态规划训练13 [Catch That Cow poj3278]相关推荐
- c语言编辑87152,POJ 3287 (基础BFS) Catch That Cow
这是做的第一道BFS,很基础很简单的题目 广度优先搜索算法如下:(用QUEUE) (1) 把初始节点S0放入Open表中: (2) 如果Open表为空,则问题无解,失败 退出: (3) 把Open表的 ...
- POJ3278 HDU2717 Catch That Cow【BFS】
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 100475 Accepted: 31438 ...
- 初识BFS POJ-3278 Catch That Cow FZU-2285 迷宫寻宝
初识BFS POJ-3278 Catch That Cow FZU-2285 迷宫寻宝 令人窒息的创新实验课让我们写程序. POJ-3278 Catch That Cow Farmer John ha ...
- POJ3278——Catch That Cow
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 114140 Accepted: 35715 ...
- POJ 3278 Catch That Cow
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 35043 Accepted: 10800 ...
- POJ 3278 Catch That Cow
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 30924 Accepted: 9536 D ...
- POJ 3278 Catch That Cow(BFS)
题目网址:http://poj.org/problem?id=3278 题目: Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Tot ...
- [VJ][bfs]Catch That Cow
Catch That Cow Description Farmer John has been informed of the location of a fugitive cow and wants ...
- BFS POJ 3278 Catch That Cow
题目传送门 1 /* 2 BFS简单题:考虑x-1,x+1,x*2三种情况,bfs队列练练手 3 */ 4 #include <cstdio> 5 #include <iostrea ...
最新文章
- SAP事务码f-02做账界面显示“页数”字段
- CSS笔记(十)position属性与定位
- 转:SqlPlus Set常用设置
- java io复用_学习Java编程-IO复用
- [Leedcode][JAVA][第125题][验证回文串][双指针][String]
- rpn风险等级评价准则_2019一建经济学习重点:技术方案经济效果评价
- AIX下密码永不过期
- Flask之Flask实例有哪些参数
- App后台开发运维和架构实践学习总结(8)——后台产品设计的4个原则
- 手机正在录音怎么隐藏
- C#-WebForm-文件上传-FileUpload控件
- (转)使用XMind打开.mmap文件不显示问题
- 网络口碑推广主要目的全知道
- 心情随笔(一):五月随笔满满的正能量
- 来信, 创业 和 移动互联网
- VMware在线添加磁盘
- 此计算机必须为委派而被信任_允许受信任的用户进行委派
- 氮化镓充电器哪家做得好_性价比最高的氮化镓充电器是哪一款?
- YII CONCAT
- 七天玩转Redis | Day7、Redis常见面试题及课程总结
热门文章
- 怎样用python批量处理文件夹_python批量处理文件或文件夹
- mysql mysqladmin 介绍_Mysql—mysqladmin 命令详解
- qt 实现html 编辑器,基于QT的HTML编辑器的设计与实现.doc
- [SpringSecurity]web权限方案_用户授权_注解使用
- Java,C++四舍五入
- [Java基础]List集合
- C++string容器-字符串查找和替换
- 计算机公共基础知识实验报告,20140902413 李雪瑞 计算机工程系实验报告345.docx...
- CMake编译opencv
- 2019-03-13-算法-进化(鸡蛋掉落)