#include<algorithm> #include<cstdio> #include<cstring> #include<cmath> #include <iostream> #include<stack> #include<cstdlib> #include<map> #pragma warning(disable:4996) using namespace std; const int N = 100005; //总结 本题 贪心 + 结构体排序 struct House//结构体排序 { int s; int cost; }a[N]; int vis[N]; int comp(House x, House y) { return x.cost > y.cost; } int main() { int n = 0; scanf("%d",&n); int i = 0; for (i = 0; i < n; i++) { scanf("%d",&a[i].s); a[i].s *= 2; } for (i = 0; i < n; i++) { scanf("%d",&a[i].cost); } sort(a, a + n, comp); int sum = 0; int max1 = 0; int k = 0; for (i = 0; i < n; i++)//找到X == 1最大的 { sum = a[i].s + a[i].cost; if (max1 <= sum) { max1 = sum; k = i; } } printf("%d\n",max1); int ans = max1; for (i = 0; i < n; i++)//从大到小加即可 { if (i == k) { continue; } if (a[i].s <= a[k].s) { ans += a[i].cost; printf("%d\n",ans); } else { ans += a[i].cost + a[i].s - a[k].s; k = i; printf("%d\n",ans); } } return 0; } /************************************************************** Problem: 2343 User: admin Language: C++ Result: Accepted Time:256 ms Memory:3248 kb ****************************************************************/