POJ 3373 Changing Digits(DP)
2016-10-17 22:12
281 查看
题目链接:点击打开链接
思路:
用d[i][j]表示前i位余数为j的最小修改次数, DP的过程中用path[i][j]表示相同状态下的下一个余数, 目的是记录路径, 用hehe[i][j]表示相同状态下该位最终的值是多少。
---到了现在, AC只为快乐。
细节参见代码:
思路:
用d[i][j]表示前i位余数为j的最小修改次数, DP的过程中用path[i][j]表示相同状态下的下一个余数, 目的是记录路径, 用hehe[i][j]表示相同状态下该位最终的值是多少。
---到了现在, AC只为快乐。
细节参见代码:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <string> #include <vector> #include <stack> #include <ctime> #include <bitset> #include <cstdlib> #include <cmath> #include <set> #include <list> #include <deque> #include <map> #include <queue> #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) using namespace std; typedef long long ll; typedef long double ld; const double eps = 1e-6; const double PI = acos(-1); const int mod = 1000000000 + 7; const int INF = 0x3f3f3f3f; const int seed = 131; const ll INF64 = ll(1e18); const int maxn = 100 + 10; int T,n,m, d[maxn][10010], vis[maxn][10010], path[maxn][10010], hehe[maxn][10010], kase = 0; char s[maxn]; int dp(int i, int j) { int& ans = d[i][j]; if(i == n+1) { if(j == 0) return 0; else return INF; } if(vis[i][j] == kase) return ans; vis[i][j] = kase; ans = INF; for(int k = 0; k <= 9; k++) { if(i == 1 && k == 0 && n != 1) continue; if(k == s[i]-'0') { int res = (j*10 + s[i]-'0')%m; int cur = dp(i+1, res); if(ans > cur) { ans = cur; path[i][j] = res; hehe[i][j] = s[i]-'0'; } continue; } int res = (j*10 + k) % m; int cur = dp(i+1, res) + 1; if(ans > cur) { ans = cur; path[i][j] = res; hehe[i][j] = k; } } return ans; } void print(int i, int j) { if(i == n+1) return ; printf("%d", hehe[i][j]); print(i+1, path[i][j]); } int main() { while(~scanf("%s%d", s+1, &m)) { n = strlen(s+1); ++kase; int ans = dp(1, 0); print(1, 0); printf("\n"); } return 0; }
相关文章推荐
- POJ 3373 Changing Digits(DP)
- POJ 3373 Changing Digits 好蛋疼的DP
- POJ 3373 Changing Digits(记录路径的dp)
- POJ 3373 Changing Digits 好蛋疼的DP
- POJ_3373_Changing Digits_DP
- POJ 3373 Changing Digits
- POJ 3373 Changing Digits 记忆化搜索
- poj3373--Changing Digits(DFS+剪枝///记忆化)
- poj 3373 Changing Digits
- poj 3373 Changing Digits (DFS + 记忆化剪枝+鸽巢原理思想)
- POJ 3373 记忆化搜索 难在转移上的 dp...
- POJ 3373 Changing Digits
- 【poj 3373】Changing Digits 题意&题解&代码(C++)
- POJ 3373 Changing Digits
- POJ-3373-Changing Digits
- poj3373——Changing Digits
- poj 3373 Changing Digits
- POJ 3373 Changing Digits
- poj 3373 Changing Digits(记忆化搜索)
- POJ-3373 (DP)