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