|
|
|
@ -19,7 +19,7 @@ int res;
|
|
|
|
|
void dfs(int u, int ul, int dl) {
|
|
|
|
|
if (ul + dl >= res) return; // 伟大的剪枝,不剪枝会TLE~,中途发现已经大于等于res的情况,就返回
|
|
|
|
|
if (u == n) { // 走完全程,收集答案
|
|
|
|
|
res = ul + dl; // 因为上面的剪枝,把ul+dl>=res的全干掉了,能到这里的,都是<res的,都可以用来更新答案
|
|
|
|
|
res = min(res, ul + dl);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -27,7 +27,9 @@ void dfs(int u, int ul, int dl) {
|
|
|
|
|
int k = 0;
|
|
|
|
|
// 如果把当前导弹使用上升序列的拦截系统进行拦截,那个选择哪个系统呢?
|
|
|
|
|
for (k = 0; k < ul; k++)
|
|
|
|
|
if (up[k] <= a[u]) break; // up[0],up[1],up[2],... 这样套拦截系统,其数值来讲,是递减的,因为是因为不能再拦截高度更低的才创建了一套新的拦截系统
|
|
|
|
|
if (up[k] <= a[u]) break;
|
|
|
|
|
// up[0],up[1],up[2],... 这样套拦截系统,其数值来讲,是递减的
|
|
|
|
|
// 这是因为不能再拦截高度更低的才创建了一套新的拦截系统
|
|
|
|
|
// 找出放到哪个拦截系统上去,结果为k
|
|
|
|
|
|
|
|
|
|
int t = up[k]; // 尝试在第k套系统进行拦截第u个导弹,那么,第u个导弹的高度就是第k套系统的新高度
|
|
|
|
|