poj 1042 Gone Fishing
2013-07-25 14:43
274 查看
题目链接:http://poj.org/problem?id=1042
题目大意:
有n个湖(1~n),有h个小时的时间。从湖1出发,有选择的在一些湖边停留钓鱼,最后在某一个湖边结束。从第i个湖到第i+1个湖需要走5*Ti分钟,同时在i湖边停留,第一个5分钟可以钓鱼Fi,以后每个5分钟减少Di。求能钓到最多鱼的方法;
思路:
用贪心,每次选一个鱼最多的湖泊钓一次鱼。对于每个湖来说,由于在任何时候鱼的数目之和在该湖里钓鱼的次数有关,和钓鱼总次数无关,所以这个策略是最优的。
题目大意:
有n个湖(1~n),有h个小时的时间。从湖1出发,有选择的在一些湖边停留钓鱼,最后在某一个湖边结束。从第i个湖到第i+1个湖需要走5*Ti分钟,同时在i湖边停留,第一个5分钟可以钓鱼Fi,以后每个5分钟减少Di。求能钓到最多鱼的方法;
思路:
用贪心,每次选一个鱼最多的湖泊钓一次鱼。对于每个湖来说,由于在任何时候鱼的数目之和在该湖里钓鱼的次数有关,和钓鱼总次数无关,所以这个策略是最优的。
#include<iostream> using namespace std; int ans[30][30]; int main() { int n,h,time,k; int i,j; while(~scanf("%d",&n)&&n) { int d[30]={0}; int t[30]={0}; int f[30]={0}; int fs[30]; scanf("%d",&h); h*=12; for(i=0;i<n;i++) scanf("%d",&f[i]); for(i=0;i<n;i++) scanf("%d",&d[i]); for(i=1;i<n;i++) scanf("%d",&t[i]); memset(ans,0,sizeof(ans)); //贪心 for(i=1;i<=n;i++)//在前i个湖里面找鱼最多的钓 { for(j=0;j<i;j++) fs[j]=f[j]; int flag=0; h-=t[i-1]; time=h; //每次找鱼最多的钓知道时间用完或湖里鱼钓完 while(time>0 && flag!=i) { k=0; for(j=1;j<i;j++) { if(fs[j]>fs[k]) k=j; } ans[i][0]+=fs[k]; ans[i][k+1]++; time--; if(fs[k]>0) { fs[k]-=d[k]; if(fs[k]<0) fs[k]=0; } flag=0; for(j=0;j<i;j++) { if(fs[j]<=0) flag++; } } //将剩余时间加到一个湖中用时 ans[i][1]+=time; } k=1; for(j=2;j<=n;j++) { if(ans[j][0]>ans[k][0]) k=j; } for(j=1;j<=n;j++) { printf("%d",5*ans[k][j]); if(j!=n) printf(", "); } printf("\n"); printf("Number of fish expected: %d\n\n",ans[k][0]); } return 0; }
相关文章推荐
- poj 1042 Gone Fishing
- POJ 1042 Gone Fishing
- POJ 1042 Gone Fishing (枚举+贪心) [12#11#16 daily] #by Plato
- POJ1042 Gone Fishing
- POJ 1042 Gone Fishing
- POJ1042 Gone Fishing
- poj 1042 Gone Fishing(DP)
- 【POJ1042】Gone Fishing 黑书上第一道贪心题。
- poj 1042 Gone Fishing
- poj 1042 Gone Fishing(贪心)
- POJ1042 Gone Fishing
- POJ - 1042 Gone Fishing(钓鱼)(深搜+贪心)
- POJ 1042 Gone Fishing(贪心)
- POJ1042-Gone Fishing 贪心经典
- poj1042 Gone Fishing
- POJ 1042 Gone Fishing
- POJ 1042 Gone fishing(枚举+贪心)
- POJ 1042 Gone Fishing(贪心+枚举)
- POJ 1042 Gone Fishing (DP)
- POJ 1042 Gone Fishing