1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 6 pair<int, int> p[210]; 7 int f[210][40010]; 8 int sum[210]; 9 10 bool cmp(pair<int, int>a, pair<int, int>b) 11 { 12 return a.second > b.second; 13 } 14 15 int main() 16 { 17 int n; 18 cin >> n; 19 for (int i = 1; i <= n; i++) 20 { 21 cin >> p[i].first >> p[i].second; 22 } 23 sort(p + 1, p + n + 1, cmp); 24 for (int i = 1; i <= n; i++) 25 sum[i] = sum[i - 1] + p[i].first; 26 memset(f, 0x3f, sizeof(f)); 27 f[0][0] = 0; 28 for (int i = 1; i <= n; i++) 29 { 30 //从一个人递推到n个人 31 for (int j = 0; j <= sum[i]; j++) 32 { 33 if (j >= p[i].first) f[i][j] = min(f[i][j], max(f[i - 1][j - p[i].first], j + p[i].second)); 34 f[i][j] = min(f[i][j], max(f[i - 1][j], sum[i] - j + p[i].second)); 35 //sum[i]表示前i个人打饭的时间和 36 //sum[i]-j=k,k为在2号窗口打饭的时间 37 //f[i][j]表示前i个人在一号窗口打饭的总时间为j时最早吃完的时间 38 } 39 } 40 int mint = 0x3f3f3f3f; 41 for (int i = 0; i <= sum[n]; i++) 42 { 43 mint = min(mint, f[n][i]); 44 } 45 cout << mint; 46 }
【常规DP】P2577 [ZJOI2005]午餐
猜你喜欢
转载自www.cnblogs.com/thjkhdf12/p/11641160.html
今日推荐
周排行