题意 你在路上走 每秒钟的开始都可以改变自己的速度(改变速度都是瞬间完成的) 知道你开始的速度v1 结束时的速度v2 整个过程所用时间t 以及每秒最多改变的速度d 求这段时间内你最多走了多远
最优的肯定是先把速度从v1升到最大 然后从最大减到v2 使得用的时间不会超多t 因为肯定是足够从v1减为或升到v2的 那么我们只用从两端往中间靠 哪边的速度小 哪边就加上d 知道两边相邻 这样就能保证每次改变的速度都最大 而且最后两端的速度差也不会大于d 也就是最优答案了
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int v[N];
int main()
{
int v1, v2, t, d, k;
while(~scanf("%d%d%d%d", &v1, &v2, &t, &d))
{
v[0] = v1, v[t - 1] = v2;
int le = 0, ri = t - 1, ans = 0;
while(le < ri - 1)
{
if(v[le] < v[ri]) v[le + 1] = v[le++] + d;
else v[ri - 1] = v[ri--] + d;
}
for(int i = 0; i < t; ++i) ans += v[i];
printf("%d\n", ans);
}
return 0;
}
//Last modified : 2015-04-13 00:27