贪心,t 大的放到前面。。。因为感染所有cell需要的phage的总数是一定的,所以产生phage需要的时间是一定的,只需要考虑用来感染的时间,这样考虑的话,把 t 小的放后面的话,可以发现总时间的最少的。
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #define LL long long #define CLR(a, b) memset(a, b, sizeof(a)) using namespace std; const int N = 111111; struct Cell { int d, t; bool operator < (const Cell& rhs) const { return t > rhs.t; } }C[N]; int main() { int t, cas = 1, n, i, j, ans, sum; scanf("%d", &t); while(t --) { scanf("%d", &n); for(i = 0; i < n; i ++) { scanf("%d%d", &C[i].d, &C[i].t); } sort(C, C + n); sum = ans = 0; for(i = 0; i < n; i ++) { sum += C[i].d; ans = max(ans, sum + C[i].t); } printf("Case %d: %d ", cas ++, ans); } }