本文最后更新于 422 天前,其中的信息可能已经有所发展或是发生改变。
持续更新中…
- dynamicPro.h
#ifndef DYNAMICPROGRAMMING_H_
#define DYNAMICPROGRAMMING_H_
// ================== Dynamic programming methodology ================== //
// Step1: 确定dp数组的下标及其含义
// Step2: 递推公式
// Step3: dp数组初始化
// Step4: 遍历顺序
// Step5: 打印dp数组
// ==================================== End ============================ //
#include <iostream>
#include <vector>
#include <string>
#include <unordered_set>
using std::cout;
using std::endl;
using std::vector;
using std::string;
using std::unordered_set;
void printVector(const vector<int>& vec);
// 使用函数模板打印不同类型的二维数组
template <typename T>
void print2DVector(const vector<vector<T>>& vec);
#endif
- dynamicPro.cpp
#include "dynamicPro.h"
void printVector(const vector<int>& vec){
if (vec.size() == 0){
cout << "[]\n";
return;
}
cout << "[";
for (int i = 0; i < vec.size(); i++){
if (i == vec.size() - 1)
cout << vec[i];
else
cout << vec[i] << ", ";
}
cout << "]\n";
}
// ===================== print 2D vector ===================== //
template <typename T>
void print2DVector(const vector<vector<T>>& vec){
if (vec.size() == 0){
cout << "[]\n";
return;
}
cout << "[";
for (int i = 0; i < vec.size(); i++){
cout << "[";
for (int j = 0; j < vec[i].size(); j++){
if (j == vec[i].size() - 1)
cout << vec[i][j];
else
cout << vec[i][j] << ", ";
}
if (i == vec.size() - 1)
cout << "]]\n";
else
cout << "], ";
}
}
// 对bool类型进行特化
template <>
void print2DVector(const vector<vector<bool>>& vec){
if (vec.size() == 0){
cout << "[]\n";
return;
}
cout << "[";
for (int i = 0; i < vec.size(); i++){
cout << "[";
for (int j = 0; j < vec[i].size(); j++){
if (j == vec[i].size() - 1)
cout << (vec[i][j] ? "true" : "false");
else
cout << (vec[i][j] ? "true" : "false") << ", ";
}
if (i == vec.size() - 1)
cout << "]]\n";
else
cout << "], ";
}
}
// 显示实例化模板函数
template void print2DVector<int>(const vector<vector<int>>& vec);
template void print2DVector<bool>(const vector<vector<bool>>& vec);
// =================== End print 2D vector =================== //