一、數字三角形
73 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 8
8 1 0
2 7 4 4
4 5 2 6 5
輸出例子:
30
典型動態規劃
#include#includeusing namespace std;
int main()
sort(dp[n-1],dp[n-1]+n);//對最後一行進行排序
cout << dp[n - 1][n - 1] << endl;//輸出最大值
} return 0;
}
二、新增回文串對於乙個字串,我們想通過新增字元的方式使得新的字串整體變成回文串,但是只能在原串的結尾新增字元,請返回在結尾新增的最短字串。
給定原字串a及它的長度n,請返回新增的字串。保證原串不是回文串。
測試樣例:
"ab",2
返回:"a"
三、最短排序每次刪除掉第乙個字元,將這個刪除掉的字元放入乙個新串中;
如果刪除後的字串是回文串則返回,否則繼續第一步;逆序ans返回
**如下
#include#include #include#include using namespace std;
bool isp(string s)
string cs(string s,int n)
reverse(s1.begin(),s1.end());//反轉字串返回
return s1;
}int main()
對於乙個無序陣列a,請設計乙個演算法,求出需要排序的最短子陣列的長度。
給定乙個整數陣列a及它的大小n,請返回最短子陣列的長度。
測試樣例:
[1,5,3,4,2,6,7],7
返回:4
[1,2,10,1,8,9],6
返回:5
舉個例子[1,5,3,4,2,6,7] 我們需要排序的範圍是5到2之間,這裡我們可以找出5和2的特徵。2是從左向右遍歷最後乙個小於(它的左邊部分最大值)的數字。然後是5,5是從右向左遍歷最後乙個大於它(右邊部分最小值)的數字。通過上面的分析我們可以得到結論,從而找出這兩個的位置然後相減在加上1就得到了我們的答案。
#include#include #include#include using namespace std;
int shortsort(int *a,int n)
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--)
else min = a[i];
} return n1 - m + 1;
}int main()
; 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#include #include#include using namespace std;
bool chkwildmatch(string a, int lena, string b, int lenb)
if (a[j] == b[i] || b[i] == '.')
else if (b[i] == '*')
else if (a[j] == b[i + 1])
} }if (j >= lena)
else
return false;
}int main()
數字三角形
題目描述 示出了乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路 徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 25 三角形中的數字為整數 1000 輸入第一行為n,表示有n行 後面n行表示三角形每條路的路徑權 輸出路徑所經過的數字的總和最大的答案 樣...
數字三角形
description 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?input 輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n 1 n 100 表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,...
數字三角形
3 8 8 1 0 2 7 4 4 4 5 2 6 5 上圖給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,和最大的路徑稱為最佳路徑。你的任務就是求出最佳路徑上的數字之和。input 1 5 7 3 8 8 1 0 2 7 4 4 4 ...