POJ 1042 贪心+遍历 需要一点点转化
2009-09-14 22:34
162 查看
这道题是贪心加遍历
需要一点点转化
遍历需要钓的湖的数目
单纯路过也算钓过
这样在每种情况中
所花费在路上的时间就是一定的
在每种情况中 各个湖除了每时每刻可提供的鱼数不同外
其余都是平等的
目标函数是尽可能多钓鱼
典型的贪心
由于要评选最优策略
因此要将所有情况的结果保留 留待最后进行比较
所以需要很大的空间开销
这是黑书上的一道题
另外
这几天看别人的程序头大
所以这次自己写的时候
将变量名改变了风格
力求看了名字就知道变量的作用
增加程序的可读性实在是很重要
不过还是懒得写注释
程序如下:
需要一点点转化
遍历需要钓的湖的数目
单纯路过也算钓过
这样在每种情况中
所花费在路上的时间就是一定的
在每种情况中 各个湖除了每时每刻可提供的鱼数不同外
其余都是平等的
目标函数是尽可能多钓鱼
典型的贪心
由于要评选最优策略
因此要将所有情况的结果保留 留待最后进行比较
所以需要很大的空间开销
这是黑书上的一道题
另外
这几天看别人的程序头大
所以这次自己写的时候
将变量名改变了风格
力求看了名字就知道变量的作用
增加程序的可读性实在是很重要
不过还是懒得写注释
程序如下:
#include <iostream> using namespace std; struct _lake{ int FishRemain; int Decrease; int TimeToNext; int TimeForFishing; }lake[30],temp_lake[30][30]; int cmp(const void* aa,const void* bb) { _lake* a = (_lake*)aa; _lake* b = (_lake*)bb; return a->FishRemain-b->FishRemain; } int main() { int n,h; int NumOfCase = 0; while (cin>>n&&n!=0) { int Fish[30]={0}; cin>>h; h*=12; //1 for 5 minutes int hToRemember = h; for (int i = 0;i < n;i++) cin>>lake[i].FishRemain; for (int i = 0;i < n;i++) cin>>lake[i].Decrease; for (int i = 0;i < n-1;i++) cin>>lake[i].TimeToNext; for (int i = 0;i < n;i++) lake[i].TimeForFishing = 0; if(NumOfCase++>0) cout<<endl; for (int NumOfLakes = 0;NumOfLakes < n;NumOfLakes++) { h = hToRemember; bool NoFish = false; memcpy(temp_lake[NumOfLakes],lake,sizeof(lake)); for (int i = 0;i < NumOfLakes;i++) h-=temp_lake[NumOfLakes][i].TimeToNext; if(h<0) break; int max,MaxLake; while (h>0) { max = temp_lake[NumOfLakes][0].FishRemain; MaxLake=0; for (int i = 0;i <= NumOfLakes;i++) { if(temp_lake[NumOfLakes][i].FishRemain>max) { max = temp_lake[NumOfLakes][i].FishRemain; MaxLake=i; } } if(temp_lake[NumOfLakes][MaxLake].FishRemain<=0) break; Fish[NumOfLakes]+=temp_lake[NumOfLakes][MaxLake].FishRemain; temp_lake[NumOfLakes][MaxLake].FishRemain-=temp_lake[NumOfLakes][MaxLake].Decrease; temp_lake[NumOfLakes][MaxLake].TimeForFishing+=5; h--; } if(h>0) temp_lake[NumOfLakes][0].TimeForFishing+=5*h; } int max = 0,MaxMethod=0; for (int i = 0;i < n;i++) { if(Fish[i]>max) { max = Fish[i]; MaxMethod = i; } } for (int i = 0;i < n;i++) { cout<<temp_lake[MaxMethod][i].TimeForFishing; if(i < n-1) cout<<", "; else cout<<endl; } cout<<"Number of fish expected: "<<max<<endl; } }
相关文章推荐
- POJ 1042 Gone Fishing(贪心+枚举)
- poj 1042 Gone Fishing(贪心)
- poj1042_贪心+枚举
- POJ 1042 Gone Fishing(钓鱼问题)__贪心
- POJ1042-Gone Fishing 贪心经典
- POJ 1042 钓鱼问题 贪心枚举及动态规划
- poj 1042 贪心
- POJ1042 Gone Fishing(贪心)
- poj 1042 贪心
- poj1042 贪心
- POJ 1042 Gone Fishing (贪心)(刘汝佳黑书)
- poj 1042 Gone Fishing 贪心+枚举
- poj1042(黑书第一道贪心题)
- POJ1042 贪心钓鱼
- poj 1042 Gone Fishing(贪心)
- POJ 1042 Gone Fishing【枚举+贪心】
- POJ - 1042 Gone Fishing(钓鱼)(深搜+贪心)
- POJ 1042:Gone Fishing【贪心】
- NYOJ 30 && POJ 1042 Gone Fishing(枚举+贪心)
- poj1042贪心方法或者dp方法