PAT甲级题目翻译+答案 AcWing(动态规划)
1007 Maximum Subsequence Sum (25 分)
- 题意 :注意最后输出的不是索引而是在那个索引的数
- 思路 :f为当前的假设开始指针,每一次累加到sum,如果sum大于res,就更新res,开始指针和结束指针;如果sum小于0,说明这段都不要了,那么sum清零,f从下一位开始
#include <iostream>using namespace std;const int N = 1e4 + 10;int num[N];int main()
{int n;cin >> n;for (int i = 0; i < n; i ++ ) cin >> num[i];int res = -1e9, sum = 0, from = 0, to = 0, f = 0;for (int i = 0; i < n; i ++ ){sum += num[i];if (sum > res) res = sum, from = f, to = i;if (sum < 0) sum = 0, f = i + 1;}if (res < 0) res = 0, from = 0, to = n - 1;cout << res << ' ' << num[from] << ' ' << num[to];return 0;
}
- 思路 :dp就是求很多集合中的最优解。状态表示为f[i],集合是所有以i为右端点的区间,属性是区间和的最大值,那么f[i]可以被分为两个区间,一个是区间长度为1,那么区间和的最大值就是w[i],一个是区间长度不为1,那么区间和的最大值就是f[i - 1] + w[i],所以f[i]=max(w[i],f[i−1]+w[i])f[i]=max(w[i],f[i-1]+w[i])f[i]=max(w[i],f[i−1]+w[i]),也就是f[i]=w[i]+max(0,f[i−1])f[i]=w[i]+max(0, f[i-1])f[i]=w[i]+max(0,f[i−1]),由于这里f[i]只会用到f[i-1],就发现其实f数组不需要开,可以用一个变量来存
#include <iostream>using namespace std;const int N = 1e4 + 10;int w[N];int main()
{int n;cin >> n;for (int i = 1; i <= n; i ++ ) cin >> w[i];int res = -1, l, r;for (int i = 1, sum = -1, start; i <= n; i ++ ){if (sum < 0) sum = 0, start = i;sum += w[i];if (sum > res){res = sum;l = w[start], r = w[i];}}if (res < 0) res = 0, l = w[1], r = w[n];cout << res << ' ' << l << ' ' << r;return 0;
}
1093 Count PAT’s (25 分)
题意 :
- 字符串 APPAPT 中共包含两个 PAT 作为子串。现在给定一个字符串,请你求出字符串中包含的 PAT 的数量。
思路 :
- P的数量,PA的数量,PAT的数量
- dp问题中字符串下标从1开始
- 注意初始化
f[0][0] = 1
,因此!"0"不能用了,所以是f[n][3]表示答案,循环j层也要从0-3,p模式字符串也要加空格 - strlen在string.h头文件中
#include <iostream>
#include <string.h>
using namespace std;const int N = 1e5 + 10, MOD = 1e9 + 7;int n;
char s[N], p[] = " PAT";
int f[N][4];int main()
{scanf("%s", s + 1);n = strlen(s + 1);f[0][0] = 1;for (int i = 1; i <= n; i ++ )for (int j = 0; j <= 3; j ++ ){f[i][j] = f[i - 1][j];if (s[i] == p[j]) f[i][j] = (f[i][j] + f[i - 1][j - 1]) % MOD;}printf("%d", f[n][3]);
}
#include <iostream>
using namespace std;const int MOD = 1e9 + 7;int main()
{string s; cin >> s;int n = s.size();int cntp = 0, cntpa = 0, cntpat = 0;for (int i = 0; i < n; i ++ ){if (s[i] == 'P') cntp ++ ;else if (s[i] == 'A') cntpa += cntp;else cntpat = (cntpat + cntpa) % MOD;}printf("%d", cntpat);
}
1101 Quick Sort (25 分)
题意 :
- 在著名的快速排序中,有一个经典的过程叫做划分。在此过程中,我们通常选取其中一个元素作为分界值。将小于分界值的元素移到其左侧,将大于分界值的元素移到其右侧。给定 N 个不同的正整数进行过一次划分后的排列情况。请你判断,共有多少元素可能是此次划分的分界值。
思路 :
- 用两个数组表示i左边的最大值和右边的最小值;注意设置两个哨兵
语法 :
- 如果size为0,输出v[0]会segment fault
#include <iostream>
#include <vector>using namespace std;const int N = 100010, INF = 2e9;int n;
int a[N], l[N], r[N];int main()
{cin >> n;for (int i = 1; i <= n; i ++ ) cin >> a[i];for (int i = 1; i <= n; i ++ ) l[i] = max(l[i - 1], a[i]);r[n + 1] = INF;for (int i = n; i; i -- ) r[i] = min(r[i + 1], a[i]);vector<int> res;for (int i = 1; i <= n; i ++ )if (l[i - 1] < a[i] && a[i] < r[i + 1])res.push_back(a[i]);cout << res.size() << endl;if (res.size()){cout << res[0];for (int i = 1; i < res.size(); i ++ ) cout << ' ' << res[i];}cout << endl;return 0;
}
PAT甲级题目翻译+答案 AcWing(动态规划)相关推荐
- PAT甲级题目翻译+答案 AcWing(数学)
1059 Prime Factors (25 分) 题意 : 给一正整数,要求分解质因数 思路 : 使用is_first,来完成除了第一个质因数前都有*的效果 如果n=1,要特判 最后如果n>1 ...
- PAT甲级题目翻译+答案 AcWing(排序)
1012 The Best Rank (25 分) 题意 :给ID和3门成绩,计算其平均分A,输出每位学生最好的排名,A>C>M>E 思路 :如果将所需的若干个元素中使第一个元素为后 ...
- PAT甲级题目翻译+答案 AcWing(模拟)
1008 Elevator (20 分) 思路 :last可能等于cur,而无论是否相等,res都是+5的 #include <iostream>using namespace std;i ...
- PAT甲级题目翻译+答案 AcWing(图论)
1003 Emergency (25 分) 题意 :求无向图中最短路的数量,以及在最短路情况下,点权之和最大是多少 思路 :dijkstra的扩展一般在第三步"用t更新其它点":s ...
- PAT甲级题目翻译+答案 AcWing(进位制)
1010 Radix (25 分) 题意 :radix进制 题意 :给两个数和其中一个数的进制,问另一个数能否在某一进制下与这数相等 思路 :如果tag等于2就交换,最后还是只需要处理tag为1这种情 ...
- PAT甲级题目翻译+答案 AcWing(字符串处理)
1001 A+B Format (20 分) 题意 :将整数转换成标准格式 思路 :从后往前遍历字符串进行模拟,每三个数字加一个逗号,但不能是在最前面加逗号,也不能是加在负号后面 #include & ...
- PAT甲级题目翻译+答案 AcWing(链表)
1032 Sharing (25 分) 题意 : suffix后缀:prefix前缀 每个结点存一个字母,一共存两个单词 分别给两个单词的第一个字母的地址以及总共的结点数 给出所有结点的地址数值和下一 ...
- PAT甲级题目翻译+答案 AcWing(树)
1004 Counting Leaves (30 分) 题意 : 家庭关系可以用家谱树来表示,给定一个家谱树,你的任务是找出其中没有孩子的成员. 第一行包含一个整数 N 表示树中结点总数以及一个整数 ...
- PAT甲级题目翻译+答案 AcWing(基础算法与数据结构)
1029 Median (25 分) 题意 : median中位数 给两个升序的序列,要求它们两个合并后的中位数 思路 : 双指针 语法 : long int #include <iostrea ...
最新文章
- 为什么明星公司会选择Go作为编程语言?
- c语言opencv所用库函数,Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略...
- HDU - 1907 John(尼姆博弈变形)
- why I cannot set SAP UI5 dropdown list as not selected
- 索引失效的场景(面试)
- java需要会的工具_Java开发者必备的几款工具,一定要掌握!
- MySQL:备份数据库脚本报错mysqldump: Couldn‘t execute ‘SELECT COLUMN_NAME****
- Python键鼠操作自动化库PyAutoGUI简介
- DateTimePicker 控件置空
- List转换成json类型以及对象转换成json类型
- 与黑产作战,揭秘数据黑产起点
- Sketch颜色替换更改插件 PasteDirect v1.0破解版
- ES查询结果全局高亮
- C++/C补充知识点,数组,数组传参,二维数组传参打印三种发方法,正则表达式
- 掘金100道(2)['1', '2', '3'].map(parseInt) what why ?
- 百度富文本编辑器 ueditor 的基本使用
- python 输出\xhh格式的16进制数据(改2)
- PyTorch数据处理工具箱
- Jetson nano系统镜像烧录
- Xilinx技术文档翻译理解汇总
热门文章
- SAP存货后续调整总结
- MR21 VS MR22 对CKMLCP结果影响
- 把SAP里的负号放到前面来的函数
- PP物料主数据中MRP相关配置字段理解
- ABAP Graphics FM Overview
- 如何把选择屏幕放到标准屏幕上
- 最具中产气质的“网易考拉”,离“中国版Costco”还有多远?
- php人工智能客服,人工智能技术在客服中心的四大应用
- 怎么更进一步学python_【百尺竿头,更进一步学Python】Python进阶课程——进程,线程和协程的区别...
- 人脸识别翼闸使用规范_人行通道闸如何搭配人脸识别使用