贪心的孩子 怎么运用C语言来实现

Problem Description
“想不出来”是一个贪心的孩子,他天天想着怎么让自己变的有钱,有一天他想到去做生意,他想用自己身上唯一的n元钱去买a物品,再用a物品按一定的比例换b物品。。。。。最后再把东西卖了。
比如Sample里的数据,想不出来先用10000买了12000个1物品,再用1物品换到了15600个2物品,再将2物品卖了得到21840元钱。
可是,想不出来不知道怎样才可以得到最多的钱,所以他请你来帮帮他。(任务物品可以分割为很细小的一块,同时,每个物品或钱最多只能进行一次买卖,特别请注意:一旦将物品转换为钱,则交易就结束了)

Input
每组数据第一行输入一个n(n <= 10000)(表示想不出来一开始有的钱数)和一个m(m <= 10000)(表示接下来有m组兑换关系)
接下来有m组数据a , b , c。
0<= a, b <= 1000000, 0 <= c <= 2;
输入过程中当a或b为0时表示为钱;
注意:输入中没给出的兑换关系表示不能兑换,兑换过程中物品都将全部兑换,兑换过程中不会出现循环。

Output
输出想不出来最后最多的钱数。(保留2位有效数字)(最后结果中不会超过2^31 - 1)。

Sample Input
10000 3
0 1 1.2
1 2 1.3
2 0 1.4

Sample Output
21840.00

这个应该可以简化为矩阵吧,例如:
a b c
a 0 0 1
b 0 0 1
c 1 1 0
矩阵表示倍数,例如开局从a行开始选,a换c就是1倍,a不能换a,所以默认为0(你也可以自己定),然后如果选定a换c,则a列全变0,
下一次从c行开始选,然后最后钱数不过就是基础钱数和几个倍数相乘
然后就是最优算法的问题了,怎么倍数最大,可以参考Dijkstra算法,如果计算量不大,完全可以遍历,不过我记得Dijkstra算法得出的不一定是最优路径,你可以找找其他算法或者遍历所有,不过矩阵化处理肯定要弄的

//用c++写的

#include
#include
#include
#include
#define M 4
#define N 5
using namespace std;
double pow(double x,double y);
int main()
{
ifstream fs("d:\file.txt",ios::in|ios::out);
while(fs.good())
cout<<(char)fs.get();
fs.close();
cout< pow(2,31);
float max;
max=pow(2,31)-1;
float n;
int m;
int i;
cout scanf("%f%d",&n,&m);
printf("n=%.0f,m=%d\n",n,m);
start:
if(n>10000|m>>10000)
{
printf("ÊäÈëµÄÊý¾Ý²»·ûºÏ¹æ¶¨£¡\n");
printf("ÇëÖØÐÂÊäÈënºÍmµÄÖµ\n");
scanf("%f%d",&n,&m);
printf("n=%.0f,m=%d\n",n,m);
goto start;
}
else
{
printf("ÏÂÃæÇëÊäÈë%d×éÎïÆ·Ãû×Ö¼°¶ÔÓ¦ÎïÆ·Ö®¼ä¶Ò»»¹ØÏµ£¬ÇÒ¹ØÏµ±ÈÀý´óÓÚµÈÓÚ1СÓÚµÈÓÚ2\n",m);

}
if(m==4)
{
    int a[N],b[N];
    float w[N];
    for(i=1;i<=m;i++)
    {
        scanf("%d",&a[i]);
        scanf("%d",&b[i]);
        scanf("%f",&w[i]);

    }
    n=n*w[1];
    int j;
    float temp,temp1,temp2;
    temp=n;
    for(j=1;j<N-2;j++)
       {
        if(b[j]==a[j+2])
        {
            n=n*w[j+1];
            temp1=n;

           }
    }
    for(j=1;j<N-3;j++)
    {
        if(b[j]==a[j+2])
        {
            n=temp;
            n=n*w[j+2];
            temp2=n;

        }
    }
    if(temp1>=temp2)
      n=temp1;
    else
       n=temp2;
    if(n<max)
    {
        printf("%.2f\n",n);
        printf("$$$$\n");
        printf("׬´óÇ®À²£¡\n");

    }
    else
    {
        printf("³¬³ö×î´ó·¶Î§¡£\n");

    }
}
else
{
    int a[M],b[M];
    float w[M];
    for(i=1;i<=m;i++)
    {
        scanf("%d",&a[i]);
        scanf("%d",&b[i]);
        scanf("%f",&w[i]);

    }
    n=n*w[1];
    int j;
    for(j=1;j<M-1;j++)
    {
        if(b[j]==a[j+1])
           n=n*w[j+1];
        else
        {
            break;
        }
    }
    if(n<max)
    {
        printf("%.2f\n",n);
        printf("$$$$\n");
        printf("׬´óÇ®À²£¡\n");

    }
    else
    {
        printf("³¬³ö×î´ó·¶Î§¡£\n");

    }
}
return 0;        

}