Bzoj3628: [JLOI2014]天天酷跑
生活随笔
收集整理的這篇文章主要介紹了
Bzoj3628: [JLOI2014]天天酷跑
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
3628: [JLOI2014]天天酷跑
Time Limit:?20 Sec??Memory Limit:?128 MBSubmit:?121??Solved:?44
[Submit][Status][Discuss]
Description
在游戲天天酷跑中,最爽的應(yīng)該是超級(jí)獎(jiǎng)勵(lì)模式了吧,沒(méi)有一切障礙,可以盡情的吃金幣,現(xiàn)在請(qǐng)你控制游戲角色來(lái)獲得盡可能多的分?jǐn)?shù)。 游戲界面離散為一個(gè)長(zhǎng)度為1~n,高度為1~m(初始點(diǎn)為(0,1))的矩陣圖。每個(gè)格子上都有收益(-1~1000),-1表示該點(diǎn)不能通過(guò)。游戲角色從起點(diǎn)一路奔跑向終點(diǎn),中途可以跳躍來(lái)獲得更高的分?jǐn)?shù),在空中還能進(jìn)行連跳。游戲開(kāi)始前你可以設(shè)定跳躍的高度,以及能連跳的次數(shù),初始跳躍高度為1,連跳數(shù)為1(最多為5),升級(jí)跳躍高度和連跳都需要一定的花費(fèi)。跳躍高度設(shè)定完后游戲角色每次跳躍高度都將固定,連跳必須在下落過(guò)程中可以使用。所有操作都將在整點(diǎn)上完成,需要保證設(shè)定完的跳躍高度及連跳數(shù),無(wú)法跳出游戲高度上限。以下是連跳數(shù)為2連跳,跳躍高度為2的跳躍方案:
Input
第一行四個(gè)整數(shù)n,m,cost1,cost2。n,m如題意所示,cost1,cost2分別表示每升一級(jí)跳躍高度,連跳數(shù)所需的花費(fèi)。
接下來(lái)m行,每行n個(gè)數(shù)。第i行第j個(gè)數(shù)表示地圖中高度為i,長(zhǎng)度在第j列處的收益。
Output
如果無(wú)法跑出終點(diǎn)線,就輸出“mission failed”,否則輸出一行三個(gè)數(shù),分別表示最大收益;及最大收益時(shí),最小的連跳數(shù);最大收益,最小連跳數(shù)時(shí),最小的跳躍高度。
Sample Input
7 4 6 109 4 7 7 4 3 2
18 8 9 4 15 12 4
19 2 4 7 10 18 12
8 1 13 14 16 0 14
Sample Output
67 1 2HINT
提示
20%數(shù)據(jù)滿(mǎn)足 m=2, n<=100000;
另有80%數(shù)據(jù) n<=10000,2<m<=20,其中20%數(shù)據(jù) 2<n<=10,m<=10;
/*定義狀態(tài)f[i][j][o]表示處于x,y這個(gè)位置,還剩余o次連跳數(shù)的最大收益如果是跑——f[i][j][o]=max(f[i][j+1][o]+w[i][j]) w[i][j]為這點(diǎn)的權(quán)值;如果是跳的話(huà)——f[i][j][o]=max(f[i+跳躍高度(high)][j+high][o--]+hhh+w[i][j]) hhh跳躍上升過(guò)程中得到的金幣數(shù)。 */ #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> using namespace std; #define inf 1<<30 #define maxn 100010 bool vis[25][maxn][6]; int f[25][maxn][6],map[25][maxn]; int n,m,c1,c2,ans=-inf,ans1,ans2,h,num; int dfs(int x,int y,int now){if(x>n)return 0;if(map[y][x]==-1)return -inf;if(vis[y][x][now])return f[y][x][now];int tot=-inf,sum=0;bool flag=1;if(y==1)now=0;if(now<num){for(int i=1;i<h;i++){if(map[y+i][x+i]==-1){flag=0;break;}sum+=map[y+i][x+i];}if(flag)tot=max(tot,sum+dfs(x+h,y+h,now+1));}if(y==1)tot=max(tot,dfs(x+1,y,0));if(y>1)tot=max(tot,dfs(x+1,y-1,now));vis[y][x][now]=1;f[y][x][now]=tot+map[y][x];return f[y][x][now]; } int main(){scanf("%d%d%d%d",&n,&m,&c1,&c2);for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)scanf("%d",&map[i][j]);for(num=1;num<=5;num++){for(h=1;h*num<m;h++){memset(f,-1,sizeof(f));memset(vis,0,sizeof(vis));int tot=dfs(0,1,m)-c2*(num-1)-c1*(h-1);if(ans<tot)ans=tot,ans1=num,ans2=h;}}if(ans>0)printf("%d %d %d",ans,ans1,ans2);else printf("mission failed");return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/thmyl/p/7485186.html
總結(jié)
以上是生活随笔為你收集整理的Bzoj3628: [JLOI2014]天天酷跑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 当TFS/VSTS遇上Power BI
- 下一篇: struts2实现文件查看、下载