在一条水平的路边有n个湖可以钓鱼,编号依次为1,2,……,n。John有h个小时的时间用于钓鱼,他希望用这些时间钓到尽量多的鱼。他从第一个湖出发,有选择地在一些湖边停留一定的时间钓鱼,最后在某一个湖边结束钓鱼。为了制定一个好的钓鱼计划,John测出了从第i 个湖走到第i+1个湖需要的时间为5•ti分钟;还测出在第i个湖边停留,第一个5分钟可以钓到的鱼的数量为fi,每钓5分钟鱼,下一个5分钟可以钓到鱼的数量便减少di。你的任务是,对给定的n,h,fi(1≤i≤n)、di(1≤i≤n)和ti(1≤i≤n),编程求出John钓鱼最多的方案。如果存在多个最优方案时,给出在第一个湖钓鱼时间尽量长得方案,如果还有多个最优方案,则给出在第二个湖钓鱼时间尽量长得方案,以此类推。例如,输入数据
4
4
10 15 50 30 
0 3 4 3 
1 2 3 
输出结果如下
Number of fish expected;724

解决方案 »

  1.   

    每mi个5分钟钓到的鱼为mi*fi-mi*(mi-1)/2*mi
    当计划钓的湖数量确定时,比如有n个湖,只计划去前k个
    路上消耗的总时间也确定了5*(t1+t2+...+tk)
    问题就转化为将剩余的时间60h-5*(t1+t2+...+tk)如何分配到每个湖上
    这就变成0,1背包问题了,回溯递归...
    对每个k值(1<=k<=n),都可以求到一个最优解
    最后再比较一次,就是最终的解