我正在尝试解决 spoj ( 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;
}
请给我一些提示。如何检查问题的年龄条件。