蜥蜴和地下室
来源:互联网 发布:linux shell 判断大小 编辑:程序博客网 时间:2024/04/29 18:48
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1489
从解空间里面找到最小的
#include<cstdio>#include<algorithm>#include<cstring>typedef long long ll;using namespace std;int val[20];int n,a,b;const int INF=0x3f3f3f3f;int ans2=INF;void dfs(int now,int cnt){if(now==n){ans2=min(ans2,cnt);return;}if(val[now-1]<0){ //就是说如果当移动条件已经满足,我们可以直接走,当然,也可以不走 dfs(now+1,cnt);} int t1=0;if(val[now-1]>=0){t1=val[now-1]/b+1;val[now-1]-=t1*b;val[now] -=t1*a;val[now+1]-=t1*b;dfs(now+1,cnt+t1);val[now-1]+=t1*b;val[now] +=t1*a;val[now+1]+=t1*b;} if(val[now]>=0){int t2=val[now]/a+1;if(t2>t1){for(int i=t1+1;i<=t2;i++){val[now-1]-=i*b;val[now] -=i*a;val[now+1]-=i*b;dfs(now+1,cnt+i);val[now-1]+=i*b;val[now] +=i*a;val[now+1]+=i*b;}} }}int main(){scanf("%d %d %d",&n,&a,&b);for(int i=1;i<=n;i++)scanf("%d",&val[i]);int ans1=0;while(val[1]>=0){val[1]-=b;val[2]-=a;val[3]-=b;ans1++;}if(n>3){while(val[n]>=0){val[n]-=b;val[n-1]-=a;val[n-2]-=b;ans1++;}}dfs(2,0);if(ans2==INF) ans2=0;printf("%d\n",ans1+ans2);return 0;}
阅读全文
0 0
- 蜥蜴和地下室
- 蜥蜴和地下室 51Nod
- 51nod 1489 蜥蜴和地下室(DFS)
- 51nod 1489 蜥蜴和地下室
- 51nod 1489 蜥蜴和地下室
- 51nod 1489 蜥蜴和地下室
- 51Nod 1489 蜥蜴和地下室
- 1489 蜥蜴和地下室 51NOD
- 51nod 1489 蜥蜴和地下室 dfs
- 51nod 1489 蜥蜴和地下室
- 51nod 1489 蜥蜴和地下室 dfs
- 51Nod-1489-蜥蜴和地下室
- 51Nod 1489 蜥蜴和地下室 DFS
- 51Nod-1489-蜥蜴和地下室
- 51nod oj 1489 蜥蜴和地下室【dfs】
- 51Nod-1489 蜥蜴和地下室(暴力DFS)
- 【51Nod】1489 - 蜥蜴和地下室(dfs)
- 51nod 1489 蜥蜴和地下室(dfs or dp)
- 61. Rotate List
- React组件属性类--propTypes
- C++获取CMD命令输出的字符
- 多线程中的单例模式
- How to use MathJax in Markdown
- 蜥蜴和地下室
- java中运行sqlmap中等待输入的问题
- Linux实现数据库的定时备份
- 搬家具
- Redis设计与实现——数据结构(一)
- 一刀切
- JS基础学习(六)
- (公式)游戏中的物理公式
- C#中引用C++的dll