【自编题】震惊!某菜鸡竟公然出题黑自己!
有巨佬有兴趣做一下吗?非常水的题。
手残的stg之路(gzz.cpp/pas)
题目背景
有一天,菜鸡手残zx在玩绀珠传E。当她打到123的4符:梦符「刈安色的迷梦」时,由于她太手残,怎么转圈也扭不过去。无奈之下,她放了一个b。但是从这之后她好像被123缠上了,连数学考试都考了123分。为了避免被zn骂,也为了不再被123纠缠下去,她立志要扭过这张符,用实力证明自己!
……
……
……
……
但是作为天下第一手残,她发现自己真的没法凭借自己的力量扭过去。于是她打算用计算机编程解决此问题。
题目描述
设这张符卡的弹幕被分成m×n的区域,每个区域有它的弹幕数量aij,自机所在的初始区域是(x,y)。手残zx只能控制自机向上下左右四个方向移动,且每次只能移动到比当前所在区域弹幕数量小的区域。已知自机从一个区域移动到另一个区域需要时间t。zx当然希望自己能扭越长时间越好。请输出她能扭的最长时间tmax。特别地,如果zx连1秒的时间都扭不下去,请输出“B”告诉她这里必须放b。
输入文件(gzz.in)
第一行五个数,分别是m,n,x,y,t
第2到n+1行,每行m个数,表示aij。
输出文件(gzz.out)
一个数tmax,表示zx最多能扭的时间。如果tmax=0,输出“B”。
样例输入
5 5 3 3 1
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
样例输出
24
数据范围
对于100%的数据,1<= m,n,x,y <= 100,0 <= aij <= 10000,1<= t <= 1000
啊啊这道题我也不太清楚我能不能过(这丫的不是你自己出的题吗
我用的记忆化搜索dp。代码:
1 #include<cstdio> 2 #define zx author 3 using namespace std; 4 int m,n; 5 int a[105][105]; 6 int f[105][105]; 7 int maxn(int a,int b) 8 { 9 if(a > b) return a; 10 else return b; 11 } 12 int js(int x,int y) 13 { 14 if(f[x][y] != 0) return f[x][y]; 15 int ans = 0; 16 if(x + 1 <= m && a[x][y] > a[x + 1][y]) ans = maxn(ans,js(x + 1,y) + 1); 17 if(y + 1 <= n && a[x][y] > a[x][y + 1]) ans = maxn(ans,js(x,y + 1) + 1); 18 if(x - 1 > 0 && a[x][y] > a[x - 1][y]) ans = maxn(ans,js(x - 1,y) + 1); 19 if(y - 1 > 0 && a[x][y] > a[x][y - 1]) ans = maxn(ans,js(x,y - 1) + 1); 20 return f[x][y] = ans; 21 } 22 int main() 23 { 24 freopen("gzz.in","r",stdin); 25 freopen("gzz.out","w",stdout); 26 int x,y; 27 int t; 28 scanf("%d%d%d%d%d",&m,&n,&x,&y,&t); 29 for(int i = 1;i <= m;i++){ 30 for(int j = 1;j <= n;j++){ 31 scanf("%d",&a[i][j]); 32 } 33 } 34 for(int i = 1;i <= m;i++){ 35 for(int j = 1;j <= n;j++){ 36 js(i,j); 37 } 38 } 39 if(js(x,y) == 0) printf("B"); 40 else printf("%d",js(x,y) * t); 41 return 0; 42 }
自己出的题自己竟然不能确定,我真是太菜了