1.大致题意:
给一个数字代表空位的列数
再从从左往右输入每列的高度。
如果骨牌的大小是1x2可以横着放也可以竖着放,给出最大可放置的骨牌数量。
2.思路
通过染色黑白相间地标出黑格和白格。
然后这时候数黑白格子地数量,少一点的就是可以放置的骨牌数量
即cout<<min(black,white);
代码实现:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
long long black,white;//用int可能会爆int
int n,a;
while(scanf("%d",&n)!=EOF){
white=black=0;
for(int i=1;i<=n;i++){
scanf("%d",&a);
if(i%2){//奇数行上如果是奇数个空位,则黑色格子要比白色格子多一个
white+=a/2;
black+=(a+1)/2;
}
else{
white+=(a+1)/2;//同理偶数行如果奇数空位,则白格多
black+=a/2;
}
}
cout<<(black<white?black:white)<<endl;
}
}