文章导读
大家好,今天我们来聊一聊NOIP 2012年普及组初赛的一道经典题目。这道题目涉及到贪心算法的应用,通过这道题目,我们可以学习如何用贪心法来解决特定类型的问题。
问题求解
题目是这样的:有若干个点,我们要从中选出一些点,使得选出的点不在同一条直线上,且尽可能多。题目给出了一个贪心法的思路,我们来一起看看如何用这种方法来解决问题。
题目解析
贪心法的关键在于找到一种方法,使得每一步都能取得当前最优解。在这个问题中,我们可以这样思考:首先构造出最坏情况下至多选4点、不在同一条直线上的情况,此时再添加任意一个点,则一定出现3点一线的情况。
题目答案
根据题目解析,我们可以得到题目答案为5。
阅读程序
#include
using namespace std;
int n, i, j, a[100][100];
int solve(int x, int y){
int u, v;
if (x == n)return a[x][y];
u = solve(x + 1, y);
v = solve(x + 1, y + 1);
if (u > v)
小结与拓展
通过这道题目,我们学习了如何用贪心法来解决点选问题。当然,贪心法并不总是万能的,有时候我们需要结合其他算法来解决问题。如果你对编程思维和算法设计感兴趣,欢迎关注「新派编程网」(www.xjpbg.com),那里有更多精彩的内容等你来探索。
我是「新派编程网」的林译川,我们下期再见!
