= =这道题折腾了我一下午 让我没能愉快地去写LCT
我最开始推出来的斜率 它居然是反的!!!还能愉快地玩耍吗???
首先把墙壁有序化 按照哪个排序都可以。。比如我们按照h升序。。
然后对于排完以后的序列 如果 i < j 并且 w[i] < w[j] 那么i是完全可以放到j里面去的
所以我们要去掉这些可以放进去的。。让他们哪凉快哪呆着去。。
然后剩下的序列就是h升序 w降序排列的了
设dp[i][j] 为前i个人开j个洞所需最小花费
显然dp[i][j] = max{ dp[k - 1][j - 1] + w[k] * h[i] } 其中k < i
令G = dp[i][j], K = h[i], x = w[k], y = dp[k-1][j-1] 则 G = y + kx 即 y = -kx + G
注意这里的k系数为负 所以计算k的时候是 (y1 - y2) / (x2 - x1)
然后经过各种艰辛的对拍 终于把它搞对了。。。注意:hdu上c++用%lld, g++用%I64d
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
in