diff --git a/Algorithm/DP-DynamicProgramming/P1164 小A点菜.cpp b/Algorithm/DP-DynamicProgramming/P1164 小A点菜.cpp new file mode 100644 index 0000000..06e4ccb --- /dev/null +++ b/Algorithm/DP-DynamicProgramming/P1164 小A点菜.cpp @@ -0,0 +1,35 @@ +#include +#include +#include +using namespace std; +int main(){ + int n, m; + cin >> n >> m; + vector arr(n); + vector dp(m + 1, 0); + unordered_map mp; + for(int i = 0; i < n; i++){ + cin >> arr[i]; + mp[i]++; + } + dp[0] = 1; + //dp[i] += dp[i - arr[j]] + + /* 0/1j㣬ǰd[i] + for(int i = 1; i <= m; i++){ + for(int j = 0; j < n; j++){ + if(i - arr[j] >= 0) { + dp[i] += dp[i - arr[j]]; + } + } + }*/ + //ظԪ + for(int j = 0; j < n; j++){ + for(int i = m; i >= arr[j]; i--){ + dp[i] += dp[i - arr[j]]; + } + } + + cout << dp[m] << endl; + return 0; +} diff --git a/Algorithm/DP-DynamicProgramming/P2758 编辑距离.cpp b/Algorithm/DP-DynamicProgramming/P2758 编辑距离.cpp new file mode 100644 index 0000000..52b7fb6 --- /dev/null +++ b/Algorithm/DP-DynamicProgramming/P2758 编辑距离.cpp @@ -0,0 +1,40 @@ +//1״̬Լ״̬ת -> +//2Ľ -> ȫĽ +//3пܲ Ž +//4һֵ +#include +#include +#include +#include +using namespace std; + +int minEditDistance(const string& a, const string& b) { + int m = a.size(), n = b.size(); + // dp[i][j]ʾA[0:i]B[0:j]С + vector> dp(m + 1, vector(n + 1, 0)); + + // ʼ߽ + for (int i = 0; i <= m; ++i) dp[i][0] = i; // ɾiַ + for (int j = 0; j <= n; ++j) dp[0][j] = j; // jַ + + // ״̬ת + for (int i = 1; i <= m; ++i) { + for (int j = 1; j <= n; ++j) { + if (a[i-1] == b[j-1]) { + dp[i][j] = dp[i-1][j-1]; // ƥ䣬 + } else { + dp[i][j] = min({dp[i-1][j-1], dp[i-1][j], dp[i][j-1]}) + 1; // 滻ɾ + } + } + } + + return dp[m][n]; +} + +int main() { + string a, b; + getline(cin, a); // ַA + getline(cin, b); // ַB + cout << minEditDistance(a, b) << endl; // + return 0; +} diff --git a/Algorithm/DP-DynamicProgramming/UVA1347 旅行 Tour.cpp b/Algorithm/DP-DynamicProgramming/UVA1347 旅行 Tour.cpp new file mode 100644 index 0000000..0ef6cde --- /dev/null +++ b/Algorithm/DP-DynamicProgramming/UVA1347 旅行 Tour.cpp @@ -0,0 +1,29 @@ +#include +#include +#include +using namespace std; + +double dist(const pair& x, const pair& y){ + double r = sqrt( (y.first - x.first) * (y.first - x.first) + (y.second - x.second) * (y.second - x.second) ); + return r; +} + +int main(){ + int n; + cin >> n; + vector> m(n); + for(int i = 0; i < n; i++){ + cin >> m[i].first >> m[i].second; + } + vector> dp(n, vector(n, 0)); + int k = 0; + //dp[0][0] = 0; + int i = 0, j = 0; + while(dp[n - 1][n - 1] == 0){ + k = max(i, j) + 1; + dp[i][k] = min(d[i][k], d[i][j] + dist(m[k], m[j])); + dp[k][j] = min(d[k][j], d[i][j] + dist(m[k], m[i])); + i++;j++; + } + return 0; +}