poj1042
2016-07-06 10:27
316 查看
Problem : Gone Fishing
Description:John要来一个钓鱼旅行历时h个小时,有n个湖,每个湖的起始鱼的数量为fi,每钓一次鱼减少的数量为di,ti表示John从第i个湖到第i+1个湖所花的时间,ti表示ti个5分钟,每次钓鱼Jhon花费5分钟,每次他都从第一个出发,并且按顺序去到各个湖,不重复路线。
Solution:贪心算法,枚举他最后到达的湖,用总时间减去走路花费的时间,剩下的时间贪心选择鱼的数量,再从枚举每个终点的数组中找出鱼的数量最多的那个。
Code(C++):
Description:John要来一个钓鱼旅行历时h个小时,有n个湖,每个湖的起始鱼的数量为fi,每钓一次鱼减少的数量为di,ti表示John从第i个湖到第i+1个湖所花的时间,ti表示ti个5分钟,每次钓鱼Jhon花费5分钟,每次他都从第一个出发,并且按顺序去到各个湖,不重复路线。
Solution:贪心算法,枚举他最后到达的湖,用总时间减去走路花费的时间,剩下的时间贪心选择鱼的数量,再从枚举每个终点的数组中找出鱼的数量最多的那个。
Code(C++):
#include <iostream> #include <cstring> using namespace std; int main() { int n,h,i,j; int rt,st; int sum[30]; int f[30],d[30],t[30],fj[30]; int ft[30][30]; while(cin>>n,n) { cin>>h; memset(sum,0,sizeof(sum)); memset(ft,0,sizeof(ft)); rt=h*12; t[0]=0; for(i=1; i<=n; i++) cin>>f[i]; for(i=1; i<=n; i++) cin>>d[i]; for(i=1; i<=n-1; i++) cin>>t[i]; for(i=1; i<=n; i++) { int max; int pos=0; rt-=t[i-1]; st=rt; for(j=1;j<=n;j++) fj[j]=f[j]; while(st>0) { max=-1; for(j=1; j<=i; j++) { if(fj[j]>max) { max=fj[j]; pos=j; } } ft[i][pos]+=1; if(fj[pos]<=d[pos]) fj[pos]=0; else fj[pos]-=d[pos]; st-=1; sum[i]+=max; } } int m=-1; int k; for(i=1; i<=n; i++) { if(sum[i]>m) { m=sum[i]; k=i; } } for(i=1; i<n; i++) { cout<<ft[k][i]*5<<", "; } cout<<ft[k] *5<<endl; cout<<"Number of fish expected: "<<sum[k]<<endl; cout<<endl; } return 0; }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- 贪心算法的C语言实现与运用详解
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi