GESP编程共123题,本题是整站第1437题,已经有人完成了本题,加油!
小杨计划学习 m 种算法,为此他找了 n 道题目来帮助自己学习,每道题目最多学习一次。
小杨对于 m 种算法的初始掌握程度均为 0。第 i 道题目有对应的知识点 ai,即学习第 i 道题目可以令小杨对第 ai 种算法的掌握程度提高 bi。小杨的学习目标是对于 m 种算法的掌握程度均至少为 k。
小杨认为连续学习两道相同知识点的题目是不好的,小杨想请你编写程序帮他计算出他最少需要学习多少道题目才能使得他在完成学习目标的同时避免连续学习两道相同知识点的题目。
第一行三个正整数 m,n,k,代表算法种类数,题目数和目标掌握程度。
第二行 n 个正整数 a1,a2,...,an,代表每道题目的知识点。
第二行 n 个正整数 b1,b2,...,bn,代表每道题目提升的掌握程度。
输出一个整数,代表小杨最少需要学习题目的数量,如果不存在满足条件的方案,输出 -1。
输入 #1
3 5 10 1 1 2 3 3 9 1 10 10 1
输出 #1
4
输入 #2
2 4 10 1 1 1 2 1 2 7 10
输出 #2
-1
一种最优学习顺序为第一道题,第三道题,第四道题,第二道题。
子任务编号 | 数据点占比 | m | n | bi | k |
---|---|---|---|---|---|
1 | 30% | 2 | ≤9 | ≤10 | ≤10 |
2 | 40% | ≤9 | ≤9 | ≤10 | ≤10 |
3 | 40% | ≤10^5 | ≤10^5 | ≤10^5 | ≤10^5 |
对于全部数据,保证有 1≤m,n,bi,k≤10^5,1≤ai≤m。
解析
1.数据准备
读入数据,并将每道题目按知识点分类,记录每种算法通过题目提升掌握程度的列表score。
2.计算每种算法所需的题目数量
对于每种算法,我们需要计算达到目标掌握程度k所需的题目数量。为了最大化利用高分题目,我们需要按分数降序排序。
3.确定最少题目数量
我们需要找到一种安排,使得小杨学习的题目数量最少,并且避免连续学习相同知识点的题目。为此,我们找出需要题目最多的算法,并尝试调整学习顺序。
4.调整学习顺序
如果最多需要的题目数量mx_need减去1之后仍然不超过总需要的题目数量减去mx_need,那么可以通过调整顺序来满足要求;否则,输出-1。
参考程序
本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。