Toxel 与 PCPC II

2024-05-31 19:44
文章标签 ii toxel pcpc

本文主要是介绍Toxel 与 PCPC II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

Problem L. Toxel 与 PCPC II Toxel 正在参加 PCPC(Pokémon Center Programming Contest)比赛。它写的一段代码中有不少 bug,正在调试。这份代码总共有 n 行,而且经验丰富的 Toxel 已经知道了其中 m 行代码有 bug,并锁 定了这 m 行的具体位置。但是 Toxel 还需要进行一些调试以了解错误的具体细节并修复它们。 Toxel 会进行多次调试。每次调试时,Toxel 可以任选一个 i,使得程序从第 1 行开始,顺序运行完 第 i 行后退出。Toxel 可以通过这 i 行代码运行的一些输出结果来进行 debug。运行这 i 行代码总共需要 i 秒。接下来,Toxel 会一次性地 debug 这 i 行代码,并修复所有这 i 行中的所有 bug。bug 数量越多,修 复所需的时间也越多。设这 i 行代码中现存的 bug 数量为 x,那么 Toxel 需要 x 4 秒来 debug 并完成修 复。修复后,这 i 行代码中将不再存在任何 bug。 PCPC 的赛场争分夺秒。请你帮 Toxel 计算一下,它最短需要多少秒才能完成 debug,修复整个代 码中的所有漏洞? 输入格式 第一行包含两个整数 n,m(1 ≤ m ≤ n ≤ 2 × 105)。 第二行包含 m 个整数 a1, a2, . . . , am(1 ≤ a1 < a2 < · · · < am ≤ n),表示代码中所有有 bug 的行编 号。 输出格式 输出一行一个整数,表示答案。 样例 standard input standard output 3 2 1 3 6 1 1 1 2 20 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 221 提示 对于第一个样例,Toxel 应该选择先运行前 1 行代码,运行消耗 1 秒,debug 消耗 1 4 = 1 秒。接下来 Toxel 应该选择运行前 3 行代码,运行消耗 3 秒,debug 消耗 1 4 = 1 秒。总计消耗 1 + 1 + 3 + 1 = 6 秒。 对于第三个样例,Toxel 可以分别运行前 1, 2, 3, . . . , 13, 14, 16, 18, 20 行来得到最优解

做法

dfs(超时)

#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[200010];
int dfs(int x, int num)
{if (x == m) return a[x] + num * num * num * num;return min(dfs(x + 1, num + 1),a[x]+dfs(x + 1, 1) + num * num * num * num);
}
int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= m; i++)scanf("%d", &a[i]);cout << dfs(1, 1);
}

正解

#include <bits/stdc++.h>
using namespace std;
int n, m;
long long a[200010];
long long dp[200010];
int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= m; i++)scanf("%lld", &a[i]);sort(a+1,a+1+m);for(int i=1;i<=m;i++) dp[i]=0x3f3f3f3f3f3f3f3f;for(int i=1;i<=m;i++){//dp[i]=a[i]+1ll*i*i*i*i;爆long long了 int j=0;if(i>50) j=i-50;//因为4次方很大,所以bug的数量不可能留很多(减少枚举数量)for(;j<i;j++){dp[i]=min(dp[i],dp[j]+1ll*(i-j)*(i-j)*(i-j)*(i-j)+a[i]);}}cout<<dp[m];
}

wa的原因

1.爆long long了

2.运算过程中没转long long

总结

只想到了dfs写法,没想到怎么转成dp,还想着能不能用二维或多维来处理bug的个数,但感觉行不通。结果题解直接两重for循环解决了。感觉是先确定dp数组的含义?本题dp数组的含义是前i行debug的最短时间。

这篇关于Toxel 与 PCPC II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1018867

相关文章

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II 1.题目 1.1复原IP地址 题目链接:93. 复原 IP 地址 - 力扣(LeetCode) 视频讲解:回溯算法如何分割字符串并判断是合法IP?| LeetCode:93.复原IP地址_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0093.%E5%A4%8

leetCode#119. Pascal's Triangle II

Description Given an index k, return the kth row of the Pascal’s triangle. For example, given k = 3, Return [1,3,3,1]. Note: Could you optimize your algorithm to use only O(k) extra space? Code