一、最长回文字符串
直接暴力求解,一个一个找
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param A string字符串
* @return int整型
*/
#include<stdio.h>
int getLongestPalindrome(char* A) {
int n = strlen(A);
int max = 1;
int i = 0;
for (i; i < n; i++)
{
int j = n - 1;
int flag = 1;
while (flag)
{
while (A[i] != A[j])
{
j--;
}
if (i == j)
{
break;
}
else
{
flag = 0;
}
int left = i;
int right = j;
while (left < right)
{
if (A[left] != A[right])
{
flag = 1;
j--;
break;
}
left++;
right--;
}
if (flag == 0)
{
if (max < j - i + 1)
{
max = j - i + 1;
}
}
}
}
return max;
}
二、买股票最好时间
继续暴力求解
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int* a = new int[n];
int i = 0;
int max = 0;
int eran = 0;
for (i; i < n; i++)
{
cin >> a[i];
if (a[i] > max)
max = a[i];
}
for (i=0; i < n; i++)
{
if (a[i] == max)
continue;
int j = i + 1;
for (j; j < n; j++)
{
int ct = a[j] - a[i];
if (ct > eran)
eran = ct;
}
}
cout << eran;
}
三、过河卒
dp,图上所示pn和c点直接跳过。
#include<iostream>
using namespace std;
int main()
{
int n, m, x, y;
cin >> n >> m >> x >> y;
long long dp[30][30] = { 0 };
int i = 1;
int j = 1;
dp[0][1] = 1;
m++;
n++;
x++;
y++;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= m; j++)
{
if ((abs(i - x) + abs(j - y) == 3 && i != x && j != y) || (i == x && j == y))
continue;
else
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
cout << dp[n][m];
}