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(动态规划)相关推荐

  1. PAT甲级题目翻译+答案 AcWing(数学)

    1059 Prime Factors (25 分) 题意 : 给一正整数,要求分解质因数 思路 : 使用is_first,来完成除了第一个质因数前都有*的效果 如果n=1,要特判 最后如果n>1 ...

  2. PAT甲级题目翻译+答案 AcWing(排序)

    1012 The Best Rank (25 分) 题意 :给ID和3门成绩,计算其平均分A,输出每位学生最好的排名,A>C>M>E 思路 :如果将所需的若干个元素中使第一个元素为后 ...

  3. PAT甲级题目翻译+答案 AcWing(模拟)

    1008 Elevator (20 分) 思路 :last可能等于cur,而无论是否相等,res都是+5的 #include <iostream>using namespace std;i ...

  4. PAT甲级题目翻译+答案 AcWing(图论)

    1003 Emergency (25 分) 题意 :求无向图中最短路的数量,以及在最短路情况下,点权之和最大是多少 思路 :dijkstra的扩展一般在第三步"用t更新其它点":s ...

  5. PAT甲级题目翻译+答案 AcWing(进位制)

    1010 Radix (25 分) 题意 :radix进制 题意 :给两个数和其中一个数的进制,问另一个数能否在某一进制下与这数相等 思路 :如果tag等于2就交换,最后还是只需要处理tag为1这种情 ...

  6. PAT甲级题目翻译+答案 AcWing(字符串处理)

    1001 A+B Format (20 分) 题意 :将整数转换成标准格式 思路 :从后往前遍历字符串进行模拟,每三个数字加一个逗号,但不能是在最前面加逗号,也不能是加在负号后面 #include & ...

  7. PAT甲级题目翻译+答案 AcWing(链表)

    1032 Sharing (25 分) 题意 : suffix后缀:prefix前缀 每个结点存一个字母,一共存两个单词 分别给两个单词的第一个字母的地址以及总共的结点数 给出所有结点的地址数值和下一 ...

  8. PAT甲级题目翻译+答案 AcWing(树)

    1004 Counting Leaves (30 分) 题意 : 家庭关系可以用家谱树来表示,给定一个家谱树,你的任务是找出其中没有孩子的成员. 第一行包含一个整数 N 表示树中结点总数以及一个整数 ...

  9. PAT甲级题目翻译+答案 AcWing(基础算法与数据结构)

    1029 Median (25 分) 题意 : median中位数 给两个升序的序列,要求它们两个合并后的中位数 思路 : 双指针 语法 : long int #include <iostrea ...

最新文章

  1. 为什么明星公司会选择Go作为编程语言?
  2. c语言opencv所用库函数,Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略...
  3. HDU - 1907 John(尼姆博弈变形)
  4. why I cannot set SAP UI5 dropdown list as not selected
  5. 索引失效的场景(面试)
  6. java需要会的工具_Java开发者必备的几款工具,一定要掌握!
  7. MySQL:备份数据库脚本报错mysqldump: Couldn‘t execute ‘SELECT COLUMN_NAME****
  8. Python键鼠操作自动化库PyAutoGUI简介
  9. DateTimePicker 控件置空
  10. List转换成json类型以及对象转换成json类型
  11. 与黑产作战,揭秘数据黑产起点
  12. Sketch颜色替换更改插件 PasteDirect v1.0破解版
  13. ES查询结果全局高亮
  14. C++/C补充知识点,数组,数组传参,二维数组传参打印三种发方法,正则表达式
  15. 掘金100道(2)['1', '2', '3'].map(parseInt) what why ?
  16. 百度富文本编辑器  ueditor 的基本使用
  17. python 输出\xhh格式的16进制数据(改2)
  18. PyTorch数据处理工具箱
  19. Jetson nano系统镜像烧录
  20. Xilinx技术文档翻译理解汇总

热门文章

  1. SAP存货后续调整总结
  2. MR21 VS MR22 对CKMLCP结果影响
  3. 把SAP里的负号放到前面来的函数
  4. PP物料主数据中MRP相关配置字段理解
  5. ABAP Graphics FM Overview
  6. 如何把选择屏幕放到标准屏幕上
  7. 最具中产气质的“网易考拉”,离“中国版Costco”还有多远?
  8. php人工智能客服,人工智能技术在客服中心的四大应用
  9. 怎么更进一步学python_【百尺竿头,更进一步学Python】Python进阶课程——进程,线程和协程的区别...
  10. 人脸识别翼闸使用规范_人行通道闸如何搭配人脸识别使用