Codeforces - 1269D ( 棋盘染色 )
题目链接:http://codeforces.com/contest/1269/problem/D
题意:有下图所示的棋盘,和1*2和2*1的棋子,尽可能多的填到棋盘里,最多填多少个。
思路:用黑白相间的棋盘来给他染色( 参照国际象棋棋盘 ), 一个棋子一定是落在一个白色和一个黑色棋点上的,所以统计黑色块和白色块的最小值。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int n,a=0,b=0,x;
cin >> n;
for ( int i=0; i<n; i++ ) { // 一列一列的考虑
cin >> x;
int l = x/2;
if ( x%2==1 ) l++;
int r = x/2;
if ( i%2==0 ) { // 当i为偶数,白色为底,
a += l;
b += r;
}
else if ( i%2==1 ) { // 当i为奇数,黑色为底
a+=r;
b+=l;
}
}
cout << min(a,b) << endl;
return 0;
}