我正试图解决一个关于spoj的问题(MPILOT)。动态编程MPILOT
我明白这是一个动态编程问题,我也试过,但它给了我一个错误的答案。我的方法就像是得到飞行员和助理的工资差额并按递减顺序排序,然后为0 - N/2
添加为assistant
并为N/2+1 - N
添加为pilot
并输出sum
。但问题在于飞行员的年龄大于助理。
这里是我的代码
#include <iostream>
#include <vector>
#include <algorithm>
#define lint long long
using namespace std;
struct pilot {
lint pilotsal;
lint assistantsal;
lint diff;
};
bool compare (pilot p1, pilot p2)
{
return (p1.diff > p2.diff);
}
int main()
{
lint c,n,i;
lint sum=0,max=0;
cin >> n;
vector <pilot> pilots(n);
for(i=0;i<n;i++)
{
cin >> pilots[i].pilotsal >> pilots[i].assistantsal;
pilots[i].diff= pilots[i].pilotsal-pilots[i].assistantsal;
}
sum = max = pilots[0].assistantsal;
sort(pilots.begin()+1,pilots.end(),compare);
for(i=1;i<=n/2-1;i++)
{
sum+=pilots[i].assistantsal;
}
for(i=n/2;i<n;i++)
{
sum+=pilots[i].pilotsal;
}
cout << sum << endl;
return 0;
}
,请给我一些暗示。如何检查问题的年龄条件。
请帮助我一些提示,因为我真的很想解决这个问题。 – shahwarcoder 2013-05-01 14:56:17
感谢您的编辑,可以请你帮我解决。 – shahwarcoder 2013-05-01 17:10:44
我现在正在尝试这个问题,但我无法保证任何事情。 – rendon 2013-05-01 17:26:06