xve 2018-02-16 00:24:08
点我顶贴
收藏
删除
#include <iostream>
using namespace std;
int main()
{
int N, s[10000] = {0}, p[10000] = {0}, z[10000] = {0};
cin >> N;
//距离
for (int i = 1; i <= N; i++) {
cin >> s[i];
}
//推销消耗的疲劳
for (int i = 1; i <= N; i++) {
cin >> p[i];
}
//算
int now_i = 0,max_i=0,max[10000] = { 0 };
for (int X = 1; X <= N; X++) {
//新的单个疲劳
for (int i = 1; i <= N; i++) {
if (i != now_i&&z[i]>=0) {
if (s[i] > s[max_i])
z[i] =p[i] + 2 * (s[i] - s[max_i]);
else
z[i] = p[i];
}
else
z[now_i] = -1;
}
//选单个疲劳最大
for (int i = 1; i <= N; i++) {
if (z[i] + max[X-1]>= max[X]) {
max[X] = z[i] + max[X - 1];
now_i = i;
if(s[i]>s[max_i])
max_i = i;
}
}
}
for (int i = 1; i <= N; i++)
cout << max[i]<<endl;
}