poj1860 Currency Exchange

链接:http://poj.org/problem?id=1860
 题意:货币兑换,然后看最后本金能否升值。
浅谈:惭愧啊。 先不说这个题,先说说我现在的想法。我觉得按以前的学习经验一般都是,有一个新的知识点,理解之后,然后会有一两个经典例题去做,去掌握这个知识点,然后再去做其它的题目。而现在算法学习是:学一个算法,学习了它的思想,代码,然后直接找题目往上套。问题是,这些题目都不是那种死板的例题,有些好活,规规矩矩的算法还没用过,就得变相使用这个算法。根本就不行啊,很吃力。
所以有些题目根本出不来。要怎么解决这个问题呢?还是要再想想,把它搞好。然后再说说这个题。惭愧的说这个又是看解题报告的。这题要用Bellman—Ford算法,关键是要反向使用。尼玛,根本没玩过。不过,总之是反着来,我就不多说了。因为不是自己想的。我的代码基本也是照着别人写的。好了,不多说了。贴代码。

#include<iostream>
#define mMAX 205
#define nMAX 105
using namespace std;
struct exchange    
  
  
{
{ int a,b; double rate,com; }; exchange ex[mMAX]; double dist[nMAX]; int S,p,cur_num; double money; bool BellmanFord(int v) { int i,k; bool flag; memset(dist,0,sizeof(dist)); dist[v]=money; for(k=1;k<cur_num;k++) { flag=true; for(i=0;i<=p;i++) { if(dist[ex[i].b]<(dist[ex[i].a]-ex[i].com)*ex[i].rate) { dist[ex[i].b]=(dist[ex[i].a]-ex[i].com)*ex[i].rate; flag=false; } } if(flag)break; } for(i=0;i<=p;i++) if(dist[ex[i].b]<(dist[ex[i].a]-ex[i].com)*ex[i].rate) return true; return false; } int main() { int n,m,s; int A,B; double Cab,Cba,Rab,Rba; int i; double v; while(cin>>n>>m>>s>>v) { S=s; money=v; cur_num=n; p=0; for(i=1;i<=m;i++) { cin>>A>>B; cin>>Rab>>Cab; cin>>Rba>>Cba; ex[p].a=A; ex[p].b=B; ex[p].rate=Rab; ex[p++].com=Cab; ex[p].a=B; ex[p].b=A; ex[p].rate=Rba; ex[p++].com=Cba; } if(BellmanFord(S)) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值