题目链接:http://poj.org/problem?id=3544
分析:目标状态是总的最大利润,不难想到,如果知道每个地方单位重量的利润,那我们只要利润最大的地方卖最重的,则总利润肯定最大.而现在已知只是单价,只要再减去单位重量的成本(运费),就能得到单位重量的利润.题目自然就简单了!
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=1005;
struct node {
int k;///编号
__int64 w;
} f[maxn];
struct maxp {
int k;///编号
__int64 d;
} p[maxn];
int g[maxn];
bool cmp(node x,node y) {
return x.w>y.w;
}
bool cmp1(maxp x,maxp y) {
return x.d>y.d;
}
int main() {
__int64 n,t,q;
cin>>n>>t;
for(int i=1; i<=n; ++i) {
f[i].k=i;
cin>>f[i].w;
}
for(int i=1; i<=n; ++i) {
p[i].k=i;
cin>>p[i].d;///i地到原地的距离
}
for(int i=1; i<=n; ++i) {
cin>>q;
p[i].d=q-p[i].d*t;///转换成i地到原地的每斤肉的利润
}
sort(f+1,f+n+1,cmp);///对n个地方的每斤肉利润从大到小排序
sort(p+1,p+n+1,cmp1);///对n头猪的重量排序
for(int i=1; i<=n; ++i)
g[p[i].k]=f[i].k;
for(int i=1; i<=n; ++i) {
cout<<g[i];
if(i!=n)cout<<' ';
}
cout<<endl;
return 0;
}