11月1日

About exam161101——Nescafe Poetize I

  • Summary:
    每逢Nescafe必挂。DP还要再练。
  • T1:
    这题当时秒出算法也是超神。其实也好像挺好想的,观察一下样例就会发现每次连接两个已经在同一连通块的点,方案数就会2+1。细想,加入一条新边以后以前的方案都可以走这条边,再加上新的两个点形成的块正好是2方案数+1。而判断连通性我们通常使用并查集,拉进没有连通的点,已经连通的点再加边就更新答案。
  • T2:
    看到题目就被吓死,看了std又觉得自己傻,还是套路太浅。这题我认为最困难的是状态定义。有了状态定义DP方程就不难得出了。而涉及负数下标通过加偏移解决。另外,分析数据也很重要,背包容量超过n的时候就是没有意义的。所以不用担心数组开不下。(这种观察数据得出结论的情况又参见3022)
  • T3:
    正解不懂。考场上写的毫无思考的模拟改一下输出删掉特判就可以得80分。加特判一定要分析数据范围,搞清楚自己程序的最大承受时间再特判,不要偷懒。

About 1373

  • 二维偏序一般先sort一维,在另一维处理。 求“交叉数”使用树状数组(即求逆序对,参见3736),求“最多不交叉”使用LIS。

About 1907

  • 定义实数常数时注意精度,多开一点无妨。
  • 最开始定义的二维DP无法实现(坐标规模过大,空间时间都无法承受)则考虑另一种数据(本题中即为k,仅为1000)来简化状态。因为本题中没有经过特殊点的地方之间的距离为曼哈顿距离*100,所以我们需要关心的仅仅是特殊点之间的转移。

About 1977

  • 与3022类似,都是求带系数不定方程解的个数。但是此题的方程却略有区别。此题求的是非负整数解的个数,与求正整数解个数的区别:(k为系数)
f[i][j]=f[i-1][j-0*k]+f[i-1][j-1*k]+f[i-1][j-2*k]+...//非负
//与正整数解个数的区别在于第一项中j-0*k。
f[i][j]=f[i-1][j-1*k]+f[i-1][j-2*k]+f[i-1][j-3*k]+...//正
//故非负解的个数递推方程应为:
f[i][j]=f[i-1][j]+f[i][j-k]
//正整数解:
f[i][j]=f[i-1][j-k]+f[i][j-k]
  • 另外,如果是不带系数不定方程求解的个数则为组合数。非负整数解个数应为C(n+k-1,k),正整数解个数应为C(k-1,n-1)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Sure, 这是Python代码: ``` import datetime dates = [] for i in range(1, 12): date = datetime.date(2021, 11, i) dates.append(date.strftime("%m-%d")) print(dates) ``` 输出结果是: ``` ['11-01', '11-02', '11-03', '11-04', '11-05', '11-06', '11-07', '11-08', '11-09', '11-10', '11-11'] ``` ### 回答2: 你可以使用datetime模块来生成指定期范围的列表。首先,导入datetime模块。然后,创建一个起始期(111)和结束期(1111)。最后,使用循环遍历从起始期到结束期的每一天,并将格式化后的期('MM-DD')添加到列表中。 以下是一个示例代码: ```python import datetime start_date = datetime.date(2021, 11, 1) # 起始期 end_date = datetime.date(2021, 11, 11) # 结束期 date_list = [] # 存储期的列表 # 遍历从起始期到结束期的每一天 current_date = start_date while current_date <= end_date: date_list.append(current_date.strftime('%m-%d')) # 将期格式化为 'MM-DD' 并添加到列表 current_date += datetime.timedelta(days=1) # 增加一天 print(date_list) ``` 运行以上代码,你将得到一个包含111号到1111号的期列表(格式为'06-18')。输出结果如下: ``` ['11-01', '11-02', '11-03', '11-04', '11-05', '11-06', '11-07', '11-08', '11-09', '11-10', '11-11'] ``` ### 回答3: 你可以使用Python的期和时间模块datetime来处理期。 首先,你需要导入datetime模块,然后创建一个起始期和一个结束期。你可以使用datetime的date类来指定年份、份和期。 接下来,你可以使用一个循环来逐步增加期,直到到达结束期。在每次循环中,你可以使用strftime函数来将期转换为所需的格式,并将其添加到一个列表中。 下面是一个示例代码: ```python from datetime import date, timedelta start_date = date(2022, 11, 1) end_date = date(2022, 11, 11) date_list = [] current_date = start_date while current_date <= end_date: formatted_date = current_date.strftime('%m-%d') date_list.append(formatted_date) current_date += timedelta(days=1) print(date_list) ``` 在这个例子中,我们通过循环从起始期到结束期逐步增加期。在每一次循环中,我们使用strftime函数将期格式化为'06-18'的形式,并将其添加到date_list列表中。最后,我们打印出date_list列表。 运行代码后,你将得到一个包含111号到1111号的期列表,每个期的格式都是'06-18'。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值