东莞网站建设 旅游,一个新产品策划方案,WordPress获取用户密码,网页设计个人信息有 N 个鱼塘排成一排#xff0c;每个鱼塘中有一定数量的鱼#xff0c;例如#xff1a;N5 时#xff0c;如下表#xff1a;
鱼塘编号12345第1分钟能钓到的鱼的数量#xff08;1..1000#xff09;101420169每钓鱼1分钟钓鱼数的减少量#xff08;1..100)24653当前鱼塘到下…有 N 个鱼塘排成一排每个鱼塘中有一定数量的鱼例如N5 时如下表
鱼塘编号12345第1分钟能钓到的鱼的数量1..1000101420169每钓鱼1分钟钓鱼数的减少量1..100)24653当前鱼塘到下一个相邻鱼塘需要的时间单位分钟3544
即在第 11 个鱼塘中钓鱼第 11 分钟内可钓到 1010 条鱼第 22 分钟内只能钓到 88 条鱼……第 55 分钟以后再也钓不到鱼了。
从第 11 个鱼塘到第 22 个鱼塘需要 33 分钟从第 22 个鱼塘到第 33 个鱼塘需要 55 分钟……
给出一个截止时间 T设计一个钓鱼方案从第 11 个鱼塘出发希望能钓到最多的鱼。
假设能钓到鱼的数量仅和已钓鱼的次数有关且每次钓鱼的时间都是整数分钟。
输入格式
共 55 行分别表示
第 11 行为 N
第 22 行为第 11 分钟各个鱼塘能钓到的鱼的数量每个数据之间用一空格隔开
第 33 行为每过 11 分钟各个鱼塘钓鱼数的减少量每个数据之间用一空格隔开
第 44 行为当前鱼塘到下一个相邻鱼塘需要的时间
第 55 行为截止时间 T。
输出格式
一个整数不超过2e9-1表示你的方案能钓到的最多的鱼。
数据范围
1≤N≤100 1≤T≤1000
输入样例
5
10 14 20 16 9
2 4 6 5 3
3 5 4 4
14输出样例
76
分析 利用贪心思维并不需要来回折返如果钓完一分钟之后这个鱼塘的鱼的数量依旧比其他鱼塘多那就继续钓这样可以节省来回的路上时间使时间最大化 注意 1int spend[N]{0}; 2memset(spend,0,sizeof(spend)); 两个的区别 第一行 这行代码是在定义数组时使用的不是赋值操作切记切记 而且也只是给第一个数组赋值为0 第二行 这个函数是C中的作用是将spend数组全部赋值为0 #includeiostream
#includecstring
using namespace std;
#define N 110int fishnum[N],d[N],dtime[N],spend[N];//鱼数减少量下个鱼塘时间钓鱼所花时间int get(int k){//求出鱼的数量return max(0,fishnum[k]-d[k]*spend[k]);
}int work(int n,int T){int res0;memset(spend,0,sizeof(spend));//将spend数组全部赋值为0for(int i0;iT;i){int t1;for(int j2;jn;j){//从第二个开始枚举鱼塘if(get(t)get(j)){tj;}}resget(t);//得到鱼的总数量spend[t];}return res;
}
int main(){int n,T;cinn;for(int i1;in;i) cinfishnum[i];for(int i1;in;i) cind[i];for(int i2;in;i){cindtime[i];dtime[i]dtime[i-1];//前缀和}cinT;int res0;for(int i1;in;i){resmax(res,work(i,T-dtime[i]));}coutresendl;return 0;}