您的位置:首页 > 运维架构

【动态规划】poj 1857 To Europe! To Europe!

2017-08-22 13:54 49 查看
题目见http://bailian.openjudge.cn/practice/1857/

解题思路:采用动态规划的思想,考虑到每一位置的最优解,即到位置i时,依次将i-1, i-2, ….放入一组,直到该组超重为止,记录最优值。有点绕,但想清楚其实就简单了,只关注当前位置,记录最优。

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
int weight,  num;
double len;
int w[10010], v[10010];
double res[10010];
while (cin >> weight >> len >> num) {
len = len * 60;
if (weight == 0 && len == 0 && num == 0) break;
for (int i = 1; i <= num; i++) {
cin >> w[i] >> v[i];
}
double sum = 0;
res[0] = 0.0;
for (int i = 1; i <= num; i++) {
int minnum = v[i];
int loadnum = w[i];
res[i] = 1.0*len / v[i] + res[i - 1];
for (int j = i-1; j >= 1; j--) {
if (loadnum + w[j] > weight) break;
else {
loadnum += w[j];
if (v[j] < minnum)
minnum = v[j];
if (res[i] > res[j - 1] + 1.0* len / minnum) {
res[i] = res[j - 1] + 1.0* len / minnum;
}
}
}
}
cout << fixed << setprecision(1) << res[num] << endl;
}
//system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj