Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 40960 | Accepted: 11927 |
Description
Input
Output
Sample Input
1 4 10000 3 2 2 8000 3 5000 1000 2 1 4 200 3000 2 1 4 200 50 2 0
Sample Output
5250
题目大意:
一个人为了娶酋长的13岁的女儿(雾),需要支付给酋长一定的钱,但是酋长提出如果他能买来另外某个人的东西,酋长会给予他一定的优惠(如起初酋长要求10000金币,但是酋长说:“如果你能买来2号的东西,我就只要求你付8000金币”,而2号的东西只需要1000金币,所以可以只花费9000金币)。但是题目限制了整个交易过程中的等级,假如你与一个等级过高的人交易过,那么你之后就不能与某些等级过低的人交易。注意:等级差距限制是对于整个交易过程而言的,不是对于每次交易。如:等级差距限制是2,那么如果之前与等级为4的人交易过,那么你就不能再与等级为1的人交易。参考代码:
#include<stack> #include<queue> #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const double eps=1e-10; const int INF=0x3f3f3f3f; const int maxn=120; struct people { int p,l,v,num[maxn],val[maxn]; }people[maxn]; int m,n; int edge[maxn][maxn],mincost[maxn]; bool used[maxn]; void dijkstra(int x) { int level=people[x].l; memset(mincost,INF,sizeof(mincost)); memset(used,false,sizeof(used)); for(int i=1;i<=n;i++) edge[0][i]=people[i].p; for(int i=0; i<=n; i++) if(people[i].l-level<=m&&people[i].l>=level)//如果能够交易,即二者等级差的绝对值小于等于M mincost[i]=edge[0][i]; used[0]=true; while(true) { int v=-1; for(int i=0; i<=n; i++) if(!used[i]&&(v==-1||mincost[i]<mincost[v])) v=i; if(v==-1) break; used[v]=true; for(int i=0; i<=n; i++) if(people[i].l<=m+level&&people[i].l>=level)//如果能够交易才可以更新代价 if(mincost[i]>mincost[v]+edge[v][i]) mincost[i]=mincost[v]+edge[v][i]; } } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif // ONLINE_JUDGE while(scanf("%d%d",&m,&n)!=EOF) { memset(people,0,sizeof(people)); memset(edge,INF,sizeof(edge)); for(int i=1; i<=n; i++) { scanf("%d%d%d",&people[i].p,&people[i].l,&people[i].v); for(int j=0; j<people[i].v; j++) scanf("%d%d",&people[i].num[j],&people[i].val[j]); } for(int i=1; i<=n; i++) for(int j=0; j<people[i].v; j++) if(fabs(people[people[i].num[j]].l-people[i].l)<=m) if (edge[people[i].num[j]][i]>people[i].val[j]) edge[people[i].num[j]][i]=people[i].val[j]; int ans=INF; for (int i=1; i<=n; i++)//遍历 { dijkstra(i); ans=min(ans,mincost[1]); } printf("%d\n", ans); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/noooooorth/article/details/47702019