Circle of Monsters

题意:n 个怪物站成一圈,有生命值 ai 和死亡后的自爆值 bi , 当一个怪物死亡后会自爆伤害下一个怪物,可以连锁反应。每一发子弹可以对怪物造成一点伤害,求最小代价杀光所有怪物。

杀死第 i 个怪物需要 e[i] = min(0, a[i] - b[i-1]) 发子弹, 不考虑第一个那么所消耗的子弹 $\sum e[i]$

然后枚举第一个点,取最小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int t,n;
ll e[MAX],a[MAX],b[MAX],ans,sum;
int main(){
//freopen("in","r",stdin);
sf(t);
while(t--){
sf(n);
fi(i,0,n)scanf("%lld%lld",&a[i],&b[i]);
sum = 0;
fi(i,0,n){
e[i] = max(0ll,a[i] - b[(i-1+n)%n]);
sum += e[i];
}
ans = INF;
fi(i,0,n)
ans = min(ans,sum + a[i] - e[i]);
printf("%lld\n",ans);
}
return 0;
}