日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51Nod 蜥蜴和地下室(搜索)

發(fā)布時間:2023/12/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51Nod 蜥蜴和地下室(搜索) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

哈利喜歡玩角色扮演的電腦游戲《蜥蜴和地下室》。此時,他正在扮演一個魔術(shù)師。在最后一關(guān),他必須和一排的弓箭手戰(zhàn)斗。他唯一能消滅他們的辦法是一個火球咒語。如果哈利用他的火球咒語攻擊第i個弓箭手(他們從左到右標(biāo)記),這個弓箭手會失去a點生命值。同時,這個咒語使與第i個弓箭手左右相鄰的弓箭手(如果存在)分別失去b(1 ≤ b < a ≤ 10)點生命值。

因為兩個端點的弓箭手(即標(biāo)記為1和n的弓箭手)與你相隔較遠(yuǎn),所以火球不能直接攻擊他們。但是哈利能用他的火球攻擊其他任何弓箭手。

每個弓箭手的生命值都已知。當(dāng)一個弓箭手的生命值小于0時,這個弓箭手會死亡。請求出哈利殺死所有的敵人所需使用的最少的火球數(shù)。

如果弓箭手已經(jīng)死亡,哈利仍舊可以將他的火球扔向這個弓箭手。

?

Input 第一行包含3個整數(shù)?n,?a,?b?(3?≤?n?≤?10;?1?≤?b?<?a?≤?10),第二行包含n個整數(shù)——h1,h2,...,hn?(1?≤?hi?≤?15),?hi?是第i個弓箭手所擁有的生命力。 Output 以一行輸出t——所需要的最少的火球數(shù)。 Input示例 3?2?1 2?2?2 Output示例 3
端點變?yōu)?是已知的,中間搜索時就是每次確定當(dāng)前搜索的點的前一個點生命值為負(fù)數(shù) #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <vector> #include <queue> #include <stack> #include <cstdlib> #include <iomanip> #include <cmath> #include <cassert> #include <ctime> #include <map> #include <set> using namespace std; #pragma comment(linker, "/stck:1024000000,1024000000") #define lowbit(x) (x&(-x)) #define max(x,y) (x>=y?x:y) #define min(x,y) (x<=y?x:y) #define MAX 100000000000000000 #define MOD 1000000007 #define pi acos(-1.0) #define ei exp(1) #define PI 3.1415926535897932384626433832 #define ios() ios::sync_with_stdio(true) #define INF 0x3f3f3f3f #define mem(a) ((a,0,sizeof(a))) typedef long long ll; int n,a,b,h[15],ans=0,pos=0,cnt=INF; void dfs(int now,int value) {if(now==n){cnt=min(cnt,value);return ;}int x=0,y=0;if(h[now-1]<0) dfs(now+1,value);else{x=h[now-1]/b+1;h[now-1]-=b*x;h[now]-=a*x;h[now+1]-=b*x;dfs(now+1,value+x);h[now-1]+=b*x;h[now]+=a*x;h[now+1]+=b*x;}y=h[now]/a+1;if(h[now]>=0 && y>x){for(int i=x+1;i<=y;i++){h[now-1]-=b*i;h[now]-=a*i;h[now+1]-=b*i;dfs(now+1,value+i);h[now-1]+=b*i;h[now]+=a*i;h[now+1]+=b*i;}} } int main() {scanf("%d%d%d",&n,&a,&b);for(int i=1;i<=n;i++)scanf("%d",&h[i]);ans=h[1]/b+1;h[1]-=b*ans;h[2]-=a*ans;h[3]-=b*ans;if(h[n]>=0){pos=h[n]/b+1;h[n]-=b*pos;h[n-1]-=a*pos;h[n-2]-=b*pos;}dfs(2,0);if(cnt==INF) printf("%d\n",ans+pos);else printf("%d\n",ans+pos+cnt);return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/8975644.html

總結(jié)

以上是生活随笔為你收集整理的51Nod 蜥蜴和地下室(搜索)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。