dp hdu-4433 locker

FreeRTOS项目:智能手表(1); 从 “最底层启动”→“系统基础配置”→“硬件驱动”→“中间件能力封装”→“上层业务功能”,分层递进、从基础到应用,就能逐步把整个项目的逻辑串联起来~ 阅读详情

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4433

题目大意:

给两个长度相等的数字串s1,s2。每次操作可以把连续的最多三位都+1或-1,如果超过9则变成0,如果小于0则变成9.问从s1到s2最少的步数。

解题思路:

每一位移动正确最多5位,如果一位一位的移动最多需要1000*5=5000 。

长度有1000太大,不能直接用BFS。

因为每次改变最多只影响3位,前面的i-3位不改变,所以可以设dp[i][j][k]表示处理到了第i位,且最后两位分别为j,k时,前面的i-2位为原串s1时,达到最终的s2的前i位时移动的最小的步数。

转移时,先把第i位移动正确,然后枚举在移动第i位时,前面两位可能到达的状态,此时第i-2位移动的步数要小于等于第i-1位的,第i-1位的要小于等于第i位的,然后根据dp[i-1]的状态更新dp[i]的状态。

比如有三位分别需要移动2 3 4位  第3位需要移动4位,在移动第3位时,可以先都移动2位,然后再后两位移动1位,最后一位再移动一位。

这类的dp做的比较少,以后多分析各种状态。

 代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#define eps 1e-6
#define INF 0x1f1f1f1f
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;

/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
*/
#define Maxn 1100
//最多只有1000*5
int dp[Maxn][12][12]; //dp[i][x][y]表示处理到了当前i位,且最后两位是x和y的,转到最后的i位所需的最小步数
int a[Maxn],b[Maxn];
char sa[Maxn];

int main()
{
   while(~scanf("%s",sa))
   {
      int n=strlen(sa);
      for(int i=1;i<=n;i++)
         a[i]=sa[i-1]-'0';
      scanf("%s",sa);
      for(int i=1;i<=n;i++)
         b[i]=sa[i-1]-'0';

      memset(dp,INF,sizeof(dp));
      dp[0][0][0]=0;
      for(int i=1;i<=n;i++)
      {
         for(int x=0;x<=9;x++)
         {
            if(i==1&&x) //只有1位的话全部处理为x=0的情况
               continue;
            for(int y=0;y<=9;y++)
            {
               int up=(b[i]-y+10)%10; //当前位一定要达到要求
               int dow=(y-b[i]+10)%10;

               if(i==1) //此时x一定为0
                  dp[i][x][y]=min(up,dow);
               else if(i==2)
               {
                  int xx=0; //i-2位置为0,表示只有一位的情况
                  for(int j=0;j<=up;j++) //正转
                  {
                     int yy=(x+j)%10; //在当前位达到要求时,前面一位最多可以移动up位
                     dp[i][x][y]=min(dp[i][x][y],dp[i-1][xx][yy]+up);
                  }
                  for(int j=0;j<=dow;j++) //反转
                  {
                     int yy=(x-j+10)%10;
                     dp[i][x][y]=min(dp[i][x][y],dp[i-1][xx][yy]+dow);
                  }
               }
               else //枚举 操作第i位up或dow时,第i-1位和第i-2位能够到达的状态
               {
                  for(int j=0;j<=up;j++) //2 3 4 先三个移动2 再后面两个移动1 最后一个再移动1
                     for(int p=j;p<=up;p++) //必须满足第i-1位移动的大于等于第i-2位,
                     {
                        int xx=(a[i-2]+j)%10;
                        int yy=(x+p)%10;
                        dp[i][x][y]=min(dp[i][x][y],dp[i-1][xx][yy]+up);
                     }
                  for(int j=0;j<=dow;j++)
                     for(int p=j;p<=dow;p++)
                     {
                        int xx=((a[i-2]-j)+10)%10;
                        int yy=(x-p+10)%10;
                        dp[i][x][y]=min(dp[i][x][y],dp[i-1][xx][yy]+dow);
                     }
               }
            }
         }
      }
      if(n==1)
         printf("%d\n",dp[1][0][a[1]]);
      else
         printf("%d\n",dp[n][a[n-1]][a[n]]);
   }
   return 0;
}


 


微信小程序 - 最新详细实现用户保存下载视频到手机相册,将视频临时路径、在线播放地址(网络路径)URL存储到手机,弹出访问手机相册权限询问,支持视频格式mp4、avi、mov、wmv、flv、webm 微信小程序,视频,手机相册,保存,另存为,小程序保存到相册权限,writePhotosAlbum,一键保存视频到手机相册功能(视频来源为链接),第一次要获取用户授权,授权使用相册权限,小程序视频下载,如何把视频下载到相册,下载一个视频到本地相册,显示下载进度,可取消下载,视频下载到本地,微信小程序视频如何下载,保存视频到相机,页面播放视频并下载到本地,安卓系统,苹果ios保存到相册报错,权限拒绝后打不开,添加相册授权弹框拒绝后再也出不来了,实现保存视频到手机相册功能,将mp4在线视频下载并存储到用户的手机中 阅读详情

相关推荐

机器学习预测股票收益(一)之随机森林模型

机器学习预测股票收益(一)前言一、导入库和数据二、处理数据以及计算特征变量三、使用随机森林回归预测股票收益1.构建训练集和测试集2.查看预测结果四、根据预测结果构建long-short投资组合1.定义投资组合函数2.定义绩效分析函数五、引入Fama-French Factor六、投资组合表现1.超额收益表现2.多因子回归总结 前言 本文将使用Python整理1927-2020年所有美国上市公司股票数据。根据历史收益以及交易量,使用随机森林,支持向量机以及神经网络等机器学习方法预测股票收益。最优结果构建的资产

weixin_47174968的博客 1万+

hdu4433 locker(dp)

hdu4433题目给出两个串,每次可以选择连续的1-3个数字,进行同时加1或者同时减1,问最少经过多少次操作,将一个串转变为另外一个串.思路dp[i][j][k]表示 前i个已经完全匹配,而这时候,第i+1个已经加了j位,第i+2位已经加了k,转移分为两步,枚举加,枚举减,感觉还是不怎么能接受。。。 http://blog.youkuaiyun.com/acm_cxlove/article/details/8

天道酬勤 505

51单片机IAP技术详解:从原理到实战,实现远程程序自更新

在嵌入式系统开发中,程序更新是产品维护和功能迭代的核心需求。传统方式依赖外部烧录器,操作繁琐且无法远程进行。IAP(在应用中编程)技术则从原理层面解决了这一难题,它允许单片机在运行过程中通过特定接口(如串口)动态修改自身的Flash程序存储器。这项技术的核心价值在于赋予设备远程升级和自主维护的能力,极大地延长了产品生命周期并降低了维护成本。其典型应用场景包括智能家居控制器、工业数据采集模块和远程仪表等部署后不便拆卸的设备。本文以经典的51单片机(如STC89C52)为例,深入剖析IAP的实现,其中Bootl

weixin_29161719的博客 406

HDU 4433

这个题我做的时候yy各种贪心,结果一直WA 可能是情况考虑不全吧,今天生成了些数据,发现贪心果然好多漏洞,比如我就挂这组test:0000 5467 改成暴力枚举就过了 #include #include #include #include #include #include using namespace std; char s1[1100],s2[1100]; int s

1292765944的专栏 1242

保姆级教程:用Vue3+Element Plus快速搭建Flowable流程定义管理后台界面

本文提供了一份详细的Vue3+Element Plus教程,指导开发者快速搭建Flowable流程定义管理后台界面。从项目初始化、核心页面设计到响应式数据处理,全面覆盖前端开发关键步骤,帮助提升企业级应用开发效率。

weixin_42662293的博客 480

用Python实现一个猜密码的程序

我们用Python实现猜密码

sk6584631_sz的博客 1261

hdu4433 locker

2012 Asia Tianjin Regional Contest -C 题目大意 给出两个串s和t,给出一套转换方法,使s经过最少的步骤变为t。 转换方法是 each digit can be rotated to 0-9 circularly.You can rotate 1-3 consecutive digits up or down in one step f[i][j]

KQZXCMH的博客 1228

HighScore3.0实战指南:XRD物相分析从入门到精通(持续更新版)

本文提供HighScore3.0软件进行XRD物相分析的完整实战指南。从软件设置、数据导入、背景扣除、寻峰等预处理步骤,到核心的Search & Match物相搜索匹配、Rietveld精修定量,以及结果输出与常见问题排查,系统讲解了从入门到精通的全流程操作与核心技巧,帮助用户高效完成材料物相鉴定与分析工作。

weixin_29310605的博客 1045

hdu4433(dp+贪心)

链接:点击打开链接 题意:给两个等长的字符串,每次最多可以旋转连续的三个数字,注意0可以旋转到9,问最少需要多少次才能将S串变为T串 代码:#include #include #include #include #include using namespace std; const int INF=0x3f3f3f3f; char s1[1005],s2[1005]; int a[1

stay_accept的专栏 698

ROS2仿真抓取分拣案例,使用myCobot 280机械臂结合ROS2系统搭建机械分拣站

本案例展示了如何利用myCobot 280 urdf模型构建一个对象分类站,并在ROS2 jazzy中完成运动规划。

m0_71627844的博客 2126

滚雪球学Java(01):Java是什么?| 入门指南

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

**My Coding Family** 629

HDU locker 4433

#include #include using namespace std; const int maxn=1005; const int INF=1000000; char s[maxn],t[maxn]; int dp[maxn][11][11]; //dp[i][j][k]表示前i位,第i位状态为j,i+1状态为k //前i-1位对第i位的影响最多为 第i位,第i+1位只要记录前i-1对第

Yukar_syt的专栏 1465

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[HDU 4433]locker[DP]

题意: 给出密码做的现状和密码, 每次可以移动连续的最多3列, 向上或向下, 求将密码调出来所需要的最少步数. 思路: 首先应看出,恢复的过程中, 调每一位的时间顺序是不影响的, 不妨就从左到右一位位消除. dp[ i ][ x ][ y ] 表示前 i 位已经消除为0, 且其后的两位为x,y时, 所需要的最小操作数. 每次可以旋转1~3位, 注意旋转3位时, 第三位和第二位的约束关系.

以中有足乐者... 1896

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

hdu 4433 locker(DP)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4433 题目大意:就是给你一个序列,相当于一个可以转的那种密码锁的初始状态,0往下转是9,9往上转是0,现在你要把它转成一个指定的序列,每次可以转动连续的1~3个数字,问你最小的操作数。 思路:DP题这是很清楚的,可是状态有点不好设计。设d[ i ][ x ][ y ] 表示前 i 个已经转好,然后 i

沉溺的专栏 803

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

HDU 4433 locker (线性dp)

OJ题目:click here~~ 题目分析:密码锁,给初始状态和目标状态。每次可正向或者反向旋转 1 , 2 , 3 位。数字在0 --- 9 之间循环。问从初始状态到目标状态的最少旋转次数。 dp[ i ][ j ][ k ]表示前i位已经匹配了 , 第i + 1目前的数字是 j , 第 i + 2 目前的数字是k , 到目标状态需要的最少旋转次数。显然dp[ n ][ j ] [ k ]

1267

hdu 4433 locker(DP)

题意:给出两个长度相同的字符串,每个字符串由0~9的数字组成,每位数字可以同时和其后i位(0 思路:很明显是个dp,但是怎么表示状态很不好想,我一开始写了个四维的dp,写着写着发现实在太难写了,最后只好放弃这个想法了。。。后来看了题解,发现别人是用3维的表示状态,即dp[i][x][y]表示前i位已经满足要求时,它的后一位为x,再后一位为y时所需要的最少操作数。这样表示状态就好写很多了,每个状态

绝望的乐园 974

HDU 4433 locker(12年天津,DP)

转载请注明出处,谢谢http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents    by---cxlove 题目:给出两个串,每次可以选择连续的1-3个数字,进行同时加1或者同时减1,问最少经过多少次操作,将一个串转变为另外一个串 http://acm.hdu.edu.cn/showproblem.php?pid=4433  以前有类似的题目

窝不是爱酱,喵~~~~ 4124

HDU 4433 locker(DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4433 题意:给两个等长的字符串,每次最多可以旋转连续的三个数字,问最少需要多少次将S串转为T串 思路:dp[i][j][k]可以表示i位匹配完成,第i +1位变作j,i + 2位变作k所需的最少步数,当i位匹配完成后,可以枚举出i + 1位能选转的次数,然后再去更新i + 2, i +...

Tongqi 794

hdu 4433 locker (dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4433 题目大意:给你一连串密码,(密码是0-》9循环转动),求最少的步骤到达目标数码。 算法思路:这个题一看就觉得要用dp思想,就是方程不好想,抓住题目给的可以连续拨动1-3密码,我的dp[i][j][k]表示第i个数字为j,第i+1个数字为k,i及以后到达目标所有的最少步骤。然后记忆...

weixin_30237281的博客 117

hdu 4433 locker(DP,4级)

C - locker Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Appoint description:  System Crawler  (2013-09-09) Description A password locker

nealgavin的专栏 1134

HDU 4433 locker 状态压缩DP

题意:给出一个长度最长为1000的

leodestiny 655

HDU4433locker【dp】

locker Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1481    Accepted Submission(s): 654 Problem Description A password locker with N digit

zhanzhaozhangxiaoyi的专栏 415

hdu 4433 Locker dp

locker Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1827    Accepted Submission(s): 833 Problem Description A password l

小囧子的博客 382

HDU 4433 locker(三维dp)

这题不太好想啊。。。。我以为是记忆化搜索但是感觉最后的状态不好转移啊。别人都是用三维dp写的,感觉很巧啊。 binshen写的:http://www.cnblogs.com/kuangbin/archive/2012/10/27/2742672.html 这题的意思就相当于是一个数字密码锁。 每次可以正向或者反向旋转连续的1-3个数字。求从现在状态转到目标状态需要的最少步数。 题目给了两个

I am a slow walker, but I never walk backwards! 1403
上一篇: 枚举+搜索 hdu-4431-Mahjong
下一篇: 模拟+二分 poj-1019-Number Sequence
Accagain
博客等级 码龄14年 376粉丝 316原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值