数字三角形&&添加回文串&&最短排序&&字符串通配
来源:互联网 发布:淘宝一千零一夜 编辑:程序博客网 时间:2024/05/21 06:47
一、数字三角形
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
如上图所示,从一个数字三角形的顶部走到底部有很多条不同的路径,规则是只能从当前节点走到下一层相邻的节点,即下一层的左边或右边。例如第三行第二个数字“1”只能走到第四行的第二个数字“7”与第三个数字“4”。
请寻找最佳一条路径,使得这条路径上节点的数字总和最大。
3 8
8 1 0
2 7 4 4
4 5 2 6 5
如上图所示,从一个数字三角形的顶部走到底部有很多条不同的路径,规则是只能从当前节点走到下一层相邻的节点,即下一层的左边或右边。例如第三行第二个数字“1”只能走到第四行的第二个数字“7”与第三个数字“4”。
请寻找最佳一条路径,使得这条路径上节点的数字总和最大。
输入描述:
输入包含多组。每组数据的第一行包含一个正整数n(1≤n≤100),代表三角形的层数。紧接着有n行数字,第i(1≤i≤n)行包含i个自然数。
输出描述:
对应每组数据,输出最大的和。
输入例子:
573 88 1 02 7 4 44 5 2 6 5
输出例子:
30
典型动态规划
#include<iostream>#include<algorithm>using namespace std;int main(){int n;while (cin>>n){int**a = new int*[n];for (int i = 0; i < n; i++)a[i] = new int[n];//输入数据for (int i = 0; i < n; i++)for (int j = 0; j <= i; j++)cin >> a[i][j];int**dp = new int*[n];for (int i = 0; i < n; i++)dp[i] = new int[n];for (int i = 0; i < n; i++)//初始化动态数组for (int j = 0; j <= i; j++) dp[i][j]=0;dp[0][0] = a[0][0];for (int i = 0; i < n - 1;i++)//从上至下的迭代for (int j = 0; j <= i; j++){dp[i + 1][j] = max(dp[i+1][j],dp[i][j]+a[i+1][j]);dp[i + 1][j + 1] = max(dp[i + 1][j + 1], dp[i][j] + a[i + 1][j + 1]);}sort(dp[n-1],dp[n-1]+n);//对最后一行进行排序cout << dp[n - 1][n - 1] << endl;//输出最大值}return 0;}
二、添加回文串题目描述
对于一个字符串,我们想通过添加字符的方式使得新的字符串整体变成回文串,但是只能在原串的结尾添加字符,请返回在结尾添加的最短字符串。
给定原字符串A及它的长度n,请返回添加的字符串。保证原串不是回文串。
测试样例:"ab",2返回:"a"每次删除掉第一个字符,将这个删除掉的字符放入一个新串中;
如果删除后的字符串是回文串则返回,否则继续第一步;逆序ans返回代码如下#include<iostream>#include <vector>#include<string>#include <algorithm>using namespace std;bool isp(string s){//判断是否为回文串string s1=s;reverse(s.begin(),s.end());if (s1 == s)return true;else return false;}string cs(string s,int n){if (isp(s))return NULL;string s1 = "";reverse(s.begin(),s.end());//反转字符串ss1 += s.back();s.pop_back();//一次次将字符串s的首个字符剔除放入新字符串s1中while (!isp(s)){//判断剔除后的S是否为回文串s1 += s.back();//若不是,重复上过程直到是为止s.pop_back();}reverse(s1.begin(),s1.end());//反转字符串返回return s1;}int main(){string s = "abcdef";cout << cs(s,s.size()) << endl;return 0;}三、最短排序题目描述
[1,2,10,1,8,9],6对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。
给定一个整数数组A及它的大小n,请返回最短子数组的长度。
测试样例:[1,5,3,4,2,6,7],7返回:4返回:5举个例子[1,5,3,4,2,6,7] 我们需要排序的范围是5到2之间,这里我们可以找出5和2的特征。2是从左向右遍历最后一个小于(它的左边部分最大值)的数字。然后是5,5是从右向左遍历最后一个大于它(右边部分最小值)的数字。通过上面的分析我们可以得到结论,从而找出这两个的位置然后相减在加上1就得到了我们的答案。#include<iostream>#include <vector>#include<string>#include <algorithm>using namespace std;int shortsort(int *a,int n){int n1 = -1;int max = a[0];for (int i = 1; i < n; i++){//从左到右找到最后一个小于它左边最大值的数字if (a[i] < max){n1 = i;}else max = a[i];}if (n1 == -1)return 0;//如果n1的值未变则说明排序有序int m = -1;int min = a[n - 1];for (int i = n - 2; i >= 0; i--){//从右到左找到最后一个大于它右边部分最小值的位置if (a[i] > min){m = i;}else min = a[i];}return n1 - m + 1;}int main(){int a[] = {1,2,10,1,8,9};cout << shortsort(a,6) << endl;return 0;}四、字符串通配题目描述
对于字符串A,其中绝对不含有字符’.’和’*’。再给定字符串B,其中可以含有’.’或’*’,’*’字符不能是B的首字符,并且任意两个’*’字符不相邻。exp中的’.’代表任何一个字符,B中的’*’表示’*’的前一个字符可以有0个或者多个。请写一个函数,判断A是否能被B匹配。
给定两个字符串A和B,同时给定两个串的长度lena和lenb,请返回一个bool值代表能否匹配。保证两串的长度均小于等于300。
测试样例:"abcd",4,".*",2返回:true#include<iostream>#include <vector>#include<string>#include <algorithm>using namespace std;bool chkWildMatch(string A, int lena, string B, int lenb) {// write code hereif (B.find(".*")<B.length()){return true;}int j = 0;for (int i = 0; i<lenb; i++){if (j >= lena){return true;}if (A[j] == B[i] || B[i] == '.'){j++;}else if (B[i] == '*'){if (A[j] == B[i - 1]){j++;i--;}else if (A[j] == B[i + 1]){j++;i++;}}}if (j >= lena){return true;}elsereturn false;}int main(){string s1 = "abcd";string s2 = ".*b";if (chkWildMatch(s1, 4, s2, 2))cout << "yes";else cout << "no";return 0;}
0 0
- 数字三角形&&添加回文串&&最短排序&&字符串通配
- 字符串通配
- 在一个非回文字符串后添加字符变成最短的回文字符串
- 最短回文串
- [编程题]字符串通配
- 字符串通配(正则表达式)
- 最短回文串 题解
- [作业]最短回文串
- string.xml中字符串通配
- 字符串通配(动态规划java)
- 算法:动态规划2 数字三角形路径最短
- 给一个字符串,在后边最短添加什么,才能使得整体变成回文串
- Leetcode Shortest Palindrome (最短回文串)
- [LeetCode] Shortest Palindrome 最短回文串
- 最短回文串[Codevs 3962]
- 最短回文串 [Codevs 3962]
- 最短回文测试结果
- nyoj37添加字符成回文串
- Algorithm, Part I Princeton University 公开课第一周 Introduction
- Java设计模式—观察者模式
- 浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘
- 早上发的可编辑ListView的Demo已经整理出来了
- 1004. 成绩排名 (20)
- 数字三角形&&添加回文串&&最短排序&&字符串通配
- iOS简单实用的AES加密(亲测,能用)
- SonarQube与Eclipse配合
- MongoDB——理论基础
- AVLoadingIndicatorView
- UIViewController中addChildViewController的坑:viewWillAppear不调用
- 自定js方法增加回调函数
- android中webservice请求的异步回调封装(一)
- bash shell 登陆时的执行的用户脚本