题目链接
思路分析
这道题目我们需要使用贪心的思想,我们先在第一个位置放置蛋糕,并同时将与该位置距离为2的位置置为-1,当我们之后遇到这个位置的我们就不进行考虑,我们局部最优就是在这一次尽可能多的放置蛋糕,以此来达到全局最优
解题代码
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//我们使用贪心的思想,我们在棋盘上尽可能地放,每放置一个位置,就将这个位置的距离为2的位置置为-1
//标记为不可再放置
int w, h;
cin >> w >> h;
vector<vector<int>> box(h, vector<int>(w, 0));
int ret = 0;
for(int i = 0; i < h; ++i)
{
for(int j = 0; j < w; ++j)
{
//说明该位置可已经进行放置
if(box[i][j] != -1)
{
ret++;
//该位置若放置,则距离该位置为2的位置就能不能再放置
if(i + 2 < h)
box[i+2][j] = -1;
if(j+2 < w)
box[i][j+2] = -1;
}
}
}
cout << ret << endl;
return 0;
}```