博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 2624 Popo's Lamps(DP 记忆化搜索)
阅读量:7208 次
发布时间:2019-06-29

本文共 1703 字,大约阅读时间需要 5 分钟。

题目链接:

题目大意:popo要将给定数量的灯变成自己想要的颜色,有一种魔法开关,可以将一连串的灯同时变成同一个颜色。给定灯的数量和popo想要实现的状态,求最小步数

Sample Input

5RGBGR4RGRG7ABACADA0

Sample Output

334

分析:令f[x][y]表示从第 x 个灯到第 y 个灯变成目标状态的最小花费,则初始时为最大值。而f[x][x]=1。

  则f[x][y] =min{ f[x][k-1]+f[k][y] | x<k<y}

  当第x,y个灯的目标状态是同一颜色时,就可以一次性将2个灯变成想要的状态

代码如下:

1 # include
2 # include
3 # include
4 #define MAX 0xFFFFFF 5 using namespace std; 6 char str[51]; 7 int f[51][51],n; 8 int dfs(int x,int y) 9 {10 int i;11 int min=y-x+1,temp;12 for(i=x+1; i<=y; i++)13 {14 if(f[x][i-1]==MAX)15 f[x][i-1]=dfs(x,i-1);16 17 if(f[i][y]==MAX)18 f[i][y]=dfs(i,y);19 20 if(min>f[x][i-1]+f[i][y])21 min=f[x][i-1]+f[i][y];22 }23 if(str[x]==str[y])24 {25 if(x+1
temp)35 min=temp;36 if(y-1>0)37 {38 if(f[x][y-1]==MAX)39 temp=dfs(x,y-1);40 else41 temp=f[x][y-1];42 }43 else44 temp=1;45 if(min>temp)46 min=temp;47 if(x+1
0)48 {49 if(f[x+1][y-1]==MAX)50 temp=dfs(x+1,y-1)+1; //额外增加一步将x,y2个灯变成目标状态的步骤51 else52 temp=f[x+1][y-1]+1;53 }54 else55 temp=1;56 if(min>temp)57 min=temp;58 }59 f[x][y]=min;60 return f[x][y];61 62 }63 int main ()64 {65 int i,j;66 while(scanf("%d",&n) && n)67 {68 scanf("%s",str);69 for(i=0; i

OJ返回”Non-zero Exit Code“这种错误,是因为最后没有写return 0;或者写成了return 1;之类的,只要改成return 0;就可以了

 

 

转载地址:http://vyoum.baihongyu.com/

你可能感兴趣的文章
Visual Studio 11预览: 新的编程语言功能
查看>>
自由职业者:5步拿下新项目
查看>>
Delphi应用程序的调试(三)监视变量
查看>>
图片轮播效果
查看>>
页面生命周期步骤
查看>>
Android Timer编写方式深解
查看>>
微软、谷歌、百度等公司经典面试100题[第1-60题]——自己的实现[转]
查看>>
linux下使用yum安装Apache+php+Mysql+phpMyAdmin
查看>>
2012年总结
查看>>
下载输入python之小说下载器version2.0
查看>>
解决hibernate双向关系造成的一方重复执行SQl,或者死循环的问题
查看>>
用js如何获取file是否存在
查看>>
Extjs DateField onchange
查看>>
KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结
查看>>
Mysql 常用命令
查看>>
linux “命令行自动补全”功能用命令
查看>>
《JAVA与模式》之装修者模式
查看>>
关于JFace中的向导式对话框(WizardDialog类)
查看>>
Oracle数据库order by排序查询分页比不分页还慢问题解决办法
查看>>
学习NGUI前的准备NGUI的相关信息
查看>>