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]相关推荐

  1. c语言编辑87152,POJ 3287 (基础BFS) Catch That Cow

    这是做的第一道BFS,很基础很简单的题目 广度优先搜索算法如下:(用QUEUE) (1) 把初始节点S0放入Open表中: (2) 如果Open表为空,则问题无解,失败 退出: (3) 把Open表的 ...

  2. POJ3278 HDU2717 Catch That Cow【BFS】

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 100475   Accepted: 31438 ...

  3. 初识BFS POJ-3278 Catch That Cow FZU-2285 迷宫寻宝

    初识BFS POJ-3278 Catch That Cow FZU-2285 迷宫寻宝 令人窒息的创新实验课让我们写程序. POJ-3278 Catch That Cow Farmer John ha ...

  4. POJ3278——Catch That Cow

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 114140   Accepted: 35715 ...

  5. POJ 3278 Catch That Cow

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 35043   Accepted: 10800 ...

  6. POJ 3278 Catch That Cow

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 30924   Accepted: 9536 D ...

  7. POJ 3278 Catch That Cow(BFS)

    题目网址:http://poj.org/problem?id=3278 题目: Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Tot ...

  8. [VJ][bfs]Catch That Cow

    Catch That Cow Description Farmer John has been informed of the location of a fugitive cow and wants ...

  9. BFS POJ 3278 Catch That Cow

    题目传送门 1 /* 2 BFS简单题:考虑x-1,x+1,x*2三种情况,bfs队列练练手 3 */ 4 #include <cstdio> 5 #include <iostrea ...

最新文章

  1. SAP事务码f-02做账界面显示“页数”字段
  2. CSS笔记(十)position属性与定位
  3. 转:SqlPlus Set常用设置
  4. java io复用_学习Java编程-IO复用
  5. [Leedcode][JAVA][第125题][验证回文串][双指针][String]
  6. rpn风险等级评价准则_2019一建经济学习重点:技术方案经济效果评价
  7. AIX下密码永不过期
  8. Flask之Flask实例有哪些参数
  9. App后台开发运维和架构实践学习总结(8)——后台产品设计的4个原则
  10. 手机正在录音怎么隐藏
  11. C#-WebForm-文件上传-FileUpload控件
  12. (转)使用XMind打开.mmap文件不显示问题
  13. 网络口碑推广主要目的全知道
  14. 心情随笔(一):五月随笔满满的正能量
  15. 来信, 创业 和 移动互联网
  16. VMware在线添加磁盘
  17. 此计算机必须为委派而被信任_允许受信任的用户进行委派
  18. 氮化镓充电器哪家做得好_性价比最高的氮化镓充电器是哪一款?
  19. YII CONCAT
  20. 七天玩转Redis | Day7、Redis常见面试题及课程总结

热门文章

  1. 怎样用python批量处理文件夹_python批量处理文件或文件夹
  2. mysql mysqladmin 介绍_Mysql—mysqladmin 命令详解
  3. qt 实现html 编辑器,基于QT的HTML编辑器的设计与实现.doc
  4. [SpringSecurity]web权限方案_用户授权_注解使用
  5. Java,C++四舍五入
  6. [Java基础]List集合
  7. C++string容器-字符串查找和替换
  8. 计算机公共基础知识实验报告,20140902413 李雪瑞 计算机工程系实验报告345.docx...
  9. CMake编译opencv
  10. 2019-03-13-算法-进化(鸡蛋掉落)