做网站宁波有什么的网络公司,空间设计专业,手机网站进不去怎么解决,网页电子书在线阅读器wordpress题目描述 有N个鱼塘排成一排#xff08;N#xff1c;100#xff09;#xff0c;每个鱼塘中有一定数量的鱼#xff0c;例如#xff1a;N5时#xff0c;如下表#xff1a; 即#xff1a;在第1个鱼塘中钓鱼第1分钟内可钓到10条鱼#xff0c;第2分钟内只能钓到8条鱼…题目描述 有N个鱼塘排成一排N100每个鱼塘中有一定数量的鱼例如N5时如下表 即在第1个鱼塘中钓鱼第1分钟内可钓到10条鱼第2分钟内只能钓到8条鱼......第5分钟以后再也钓不到鱼了。从第1个鱼塘到第2个鱼塘需要3分钟从第2个鱼塘到第3个鱼塘需要5分钟...... 给出一个截止时间TT1000设计一个钓鱼方案从第1个鱼塘出发希望能钓到最多的鱼。假设能钓到鱼的数量仅和已钓鱼的次数有关且每次钓鱼的时间都是整数分钟。 输入格式 共5行分别表示 第一行为整数N 第二行为第1分钟各个鱼塘能钓到的鱼的数量每个数据之间用一空格隔开 第三行为每过1分钟各个鱼塘钓鱼数的减少量每个数据之间用一空格隔开 第四行为当前鱼塘到下一个相邻鱼塘需要的时间 第五行为截止时间T。 输出格式 仅一个整数表示能钓到的最多的鱼。 输入样例 5 10 14 20 16 9 2 4 6 5 3 3 5 4 4 14 输出样例 76 题解 我们其实可以枚举从鱼塘$1$走到鱼塘$i$在这过程中钓到的鱼的最大值。 我们先提前减去来往鱼塘之间的时间这样实际上就是转换成每次任意选第$1$到第$i$个鱼塘来钓鱼用堆维护一下即可。 #include iostream
#include cstdio
#include queue
#include map#define MAX_N (100 5)using namespace std;int n;
int a[MAX_N], b[MAX_N], c[MAX_N];
int t;
priority_queue pair int, int q;
int ans;int main()
{scanf(%d, n);for(register int i 1; i n; i){scanf(%d, a i);}for(register int i 1; i n; i){scanf(%d, b i);}for(register int i 1; i n; i){scanf(%d, c i);}scanf(%d, t);int tmp, sum, val, idx;for(register int i 1; i n t 0; i){while(!q.empty()) q.pop();for(register int j 1; j i; j){q.push(make_pair(a[j], j));}tmp t;sum 0;while(tmp-- !q.empty()){val q.top().first;idx q.top().second;q.pop();sum val;val - b[idx];if(val 0) q.push(make_pair(val, idx));}ans max(ans, sum);t - c[i];}printf(%d, ans);return 0;
} 参考程序 转载于:https://www.cnblogs.com/kcn999/p/11216134.html