DP-Exercise
This commit is contained in:
35
Algorithm/DP-DynamicProgramming/P1164 小A点菜.cpp
Normal file
35
Algorithm/DP-DynamicProgramming/P1164 小A点菜.cpp
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <unordered_map>
|
||||||
|
using namespace std;
|
||||||
|
int main(){
|
||||||
|
int n, m;
|
||||||
|
cin >> n >> m;
|
||||||
|
vector<int> arr(n);
|
||||||
|
vector<int> dp(m + 1, 0);
|
||||||
|
unordered_map<int, int> mp;
|
||||||
|
for(int i = 0; i < n; i++){
|
||||||
|
cin >> arr[i];
|
||||||
|
mp[i]++;
|
||||||
|
}
|
||||||
|
dp[0] = 1;
|
||||||
|
//dp[i] += dp[i - arr[j]]
|
||||||
|
|
||||||
|
/* 0/1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>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]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
//<2F><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
|
||||||
|
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;
|
||||||
|
}
|
||||||
40
Algorithm/DP-DynamicProgramming/P2758 编辑距离.cpp
Normal file
40
Algorithm/DP-DynamicProgramming/P2758 编辑距离.cpp
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
//1<><31>״̬<D7B4>Լ<EFBFBD>״̬ת<CCAC><D7AA> -> <20><><EFBFBD><EFBFBD>
|
||||||
|
//2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD> -> ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD>
|
||||||
|
//3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF>ܲ<EFBFBD><DCB2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD>
|
||||||
|
//4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
#include <algorithm>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int minEditDistance(const string& a, const string& b) {
|
||||||
|
int m = a.size(), n = b.size();
|
||||||
|
// dp[i][j]<5D><>ʾA[0:i]<5D><>B[0:j]<5D><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
|
||||||
|
|
||||||
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD>߽<EFBFBD>
|
||||||
|
for (int i = 0; i <= m; ++i) dp[i][0] = i; // ɾ<><C9BE>i<EFBFBD><69><EFBFBD>ַ<EFBFBD>
|
||||||
|
for (int j = 0; j <= n; ++j) dp[0][j] = j; // <20><><EFBFBD><EFBFBD>j<EFBFBD><6A><EFBFBD>ַ<EFBFBD>
|
||||||
|
|
||||||
|
// ״̬ת<CCAC><D7AA>
|
||||||
|
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]; // ƥ<>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
} else {
|
||||||
|
dp[i][j] = min({dp[i-1][j-1], dp[i-1][j], dp[i][j-1]}) + 1; // <20>滻<EFBFBD><E6BBBB>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dp[m][n];
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
string a, b;
|
||||||
|
getline(cin, a); // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>A
|
||||||
|
getline(cin, b); // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>B
|
||||||
|
cout << minEditDistance(a, b) << endl; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
29
Algorithm/DP-DynamicProgramming/UVA1347 旅行 Tour.cpp
Normal file
29
Algorithm/DP-DynamicProgramming/UVA1347 旅行 Tour.cpp
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <cmath>
|
||||||
|
#include <vector>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
double dist(const pair<int, int>& x, const pair<int, int>& 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<pair<int, int>> m(n);
|
||||||
|
for(int i = 0; i < n; i++){
|
||||||
|
cin >> m[i].first >> m[i].second;
|
||||||
|
}
|
||||||
|
vector<vector<int>> dp(n, vector<int>(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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user