题意:
n个木棍,想拼成若干矩形,使得面积最大。
附加条件:每根棍子可以把长度最多减1
思路:
容易得出一个贪心思路。
按长度从大到小排序后,依次拿。
但是我的写法有一个bug。。
因为先做了一次统计,然后从1e6到2遍历。。
比如其中一段(X = O + 1) O O O O X
忽略 X
O O 配对
O O 配对
这样就使得可行解空间变小了, 应该这样
O X 配对
O O 配对
这样剩下的O就可能再配一对
贪心需谨慎 t_t
LL a[Maxn+5], n;
LL solve() {
LL ret = 0;
vector<LL> v;
urep(i, Maxn, 2) {
if (a[i]) a[i] += a[i+1], a[i+1] = 0;
while (a[i] >= 2) {
v.push_back(i);
a[i] -= 2;
}
if (a[i] && a[i+1]) {
v.push_back(i);
a[i] = 0;
}
}
int sz = v.size();
for (int i=0;i<sz-1;i+=2) {
ret += v[i]*v[i+1];
}
return ret;
}