概述
声明:如需转载本文,请附上本文链接:https://blog.csdn.net/llh200804/article/details/121190370
俄罗斯方块
时间限制:1秒 内存限制:128M
题目描述
首先把经典的俄罗斯方块游戏简化一下:方块有顺序的从屏幕顶端掉下至底部,当碰到障碍物或底部时将停下,同时变成新的障碍物。游戏规则规定,只能在方块下落停止前决定下落时的横向位置,使这个方块变成障碍物后的高度最低,且如果有几种横向位置使这个方块变成障碍物后的高度最低时,取最左边的横向位置下落
输入描述
第一行有两个整数,表示方块数n和屏幕宽度w,之间用一个空格分隔
第2~i+1行,每行一个整数,为第i个方块的边长a
输出描述
输出一个整数,表示最后障碍物的最高点高度
样例
输入
3 5
2
1
3
输出
4
提示
对于100%的数据满足:1<=w<=20,1<=a<=w,1<=n<=100
首先,先看题目,题目说的使这个方块变成障碍物后的高度最低时,取最左边的横向位置下落。那么问题就好说了,看输入样例2,1,3是方块的边长,那么,这其实是模拟的题目。只需要按照题目模拟就行了。
话不多说,直接上代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int N = 2010;
const int INF = 0x3f3f3f3f;
int h[N];
int main(){
int n,w,a,maxx=0;
cin>>n>>w;
mem(h,0);
for(int i=0;i<n;i++){
cin>>a;
int minn=9999,mi;
for(int j=0;j<w-a+1;j++){
int max=0;
for(int k=j;k<=j+a-1;k++){
if(h[k]>max){
max=h[k];
}
}
if(max<minn){
minn=max;
mi=j;
}
}
for(int j=mi;j<=mi+a-1;j++){
h[j]=minn+a;
}
}
for(int i=0;i<w;i++){
maxx=max(h[i],maxx);
}
cout<<maxx;
}
喜欢的小伙伴,可以点赞收藏或打赏哦
最后
以上就是快乐人生为你收集整理的俄罗斯方块的全部内容,希望文章能够帮你解决俄罗斯方块所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复