解决ACM问题:LIS算法C++代码实现

版权申诉
0 下载量 17 浏览量 更新于2024-10-10 收藏 617B GZ 举报
资源摘要信息:"最长递增子序列(LIS)问题是在计算机科学和算法设计中常见的问题。ACM指的是计算机科学竞赛——ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest,简称ACM ICPC)。LIS.cpp文件是用C++编写的程序代码,旨在解决LIS问题,并帮助用户让自己的代码被UVa Judge所接受。UVa Judge是用于提交ACM ICPC样题和相关算法问题的在线评判系统。这个文件可能会包含解决最长递增子序列问题的算法实现,以及可能需要的辅助代码,以便程序能够被UVa Judge正确评测。" 详细知识点如下: 1. **最长递增子序列(Longest Increasing Subsequence, LIS)问题:** LIS问题是指,在一个给定的无序数组中找到最长递增序列的长度。这里的“递增”意味着每个数都比前一个数大。LIS问题不仅是编程竞赛中的常见问题,也是动态规划算法的经典应用场景之一。 2. **动态规划(Dynamic Programming):** 解决LIS问题通常采用动态规划方法。动态规划是一种算法思想,其基本策略是将大问题分解为小问题,通过解决小问题来构建大问题的解决方案。在LIS问题中,可以定义一个数组dp,其中dp[i]表示以第i个元素结尾的最长递增子序列的长度。通过比较前i-1个元素,找到所有满足条件的dp[j](j < i),然后选择最大的dp[j] + 1更新dp[i]。 3. **ACM国际大学生程序设计竞赛(ACM ICPC):** ACM ICPC是一项面向全球大学生的计算机程序设计竞赛,由ACM主办,旨在促进大学生在计算机编程领域的实际问题解决能力和团队合作精神。ACM ICPC的题目通常涉及算法和数据结构的多个领域,是最具挑战性的程序设计比赛之一。 4. **UVa Judge系统:** UVa Judge是一个在线的编程竞赛评测系统,它可以用来练习和提交ACM ICPC以及其他在线编程竞赛的题目。UVa Judge为参与者提供了一个平台来提交代码,系统会自动测试这些代码并反馈结果。这对于参赛者来说是一个很好的练习和提升编程能力的机会。 5. **算法代码提交与反馈:** 在ACM ICPC及类似的编程竞赛中,参与者需要将编写的代码提交至评测系统。系统会对代码进行测试,检查代码是否正确解决问题,并在一定的时间限制和内存限制内成功执行。一个算法的代码提交不仅仅是编写代码,还包括理解问题要求、设计合适的算法和数据结构、调试以及优化代码等过程。 6. **文件压缩格式tar.gz:** LIS.cpp.tar.gz是LIS.cpp源代码文件的压缩包,使用了tar和gzip压缩格式。tar是Unix系统上的归档工具,它将多个文件打包成一个文件;gzip是一种数据压缩程序,用于压缩文件。这种压缩格式通常在Linux环境下使用,便于将多个文件打包并压缩存储,以方便文件的传输和存档。 7. **帮助信息(Help!):** 在标题和标签中出现的“Help!”表明这个文件或代码可能包含对解决LIS问题的额外帮助,例如注释说明、使用教程、示例代码等,旨在指导用户更好地理解如何使用这个LIS.cpp文件,以及如何让自己的代码通过UVa Judge的测试。这可能包括对算法的解释、代码中关键步骤的说明,甚至可能包括一些测试用例和预期结果。 综上所述,LIS.cpp.tar.gz文件是一个关于LIS问题的算法实现的C++代码压缩包,它旨在帮助用户编写出能够通过UVa Judge的代码,同时提供ACM ICPC竞赛中可能遇到的最长递增子序列问题的解决方案。
2023-06-13 上传

import requests import random import parsel visited_urls = set() # 保存已经访问过的链接 page = 1 while True: # 循环爬取 url = f'https://travel.qunar.com/travelbook/list.htm?page={page}&order=hot_heat' html_data = requests.get(url).text selector = parsel.Selector(html_data) lis = selector.css('.list_item h2 a::attr(href)').getall() # 遍历当前页面中的所有链接 for li in lis: detail_url = 'https://travel.qunar.com' + li if detail_url in visited_urls: # 如果链接已经访问过,则跳过 continue visited_urls.add(detail_url) # 将链接加入集合中 detail_html = requests.get(detail_url).text time.sleep(random.randint(3, 5)) detail_selector = parsel.Selector(detail_html) title = detail_selector.css('.b_crumb_cont *:nth-child(3)::text').get() comment = detail_selector.css('.title.white::text').get() view_count = detail_selector.css('.view_count::text').get() date = detail_selector.css('#js_mainleft > div.b_foreword > ul > li.f_item.when > p > span.data::text').get() days = detail_selector.css('#js_mainleft > div.b_foreword > ul > li.f_item.howlong > p > span.data::text').get() money = detail_selector.css('#js_mainleft > div.b_foreword > ul > li.f_item.howmuch > p > span.data::text').get() character = detail_selector.css('#js_mainleft > div.b_foreword > ul > li.f_item.who > p > span.data::text').get() play_list = detail_selector.css('#js_mainleft > div.b_foreword > ul > li.f_item.how > p > span.data > span::text').getall() for play in play_list: print(play) print(title, comment, view_count, date, days, money, character, play_list, detail_url) time.sleep(random.randint(3, 5)) # 判断是否需要继续爬取 if len(lis) == 0 or page >= 20: break page += 1这段代码怎么将爬取出来的所有数据保存到csv文件

2023-06-13 上传