一開始写的高位往低位递推,发现这样有些时候保证不了第四条要求。于是又開始写高位往低位的记忆化搜索,又发现传參什么的蛋疼的要死。然后又发现高位開始的记忆化搜索就是从低位往高位的递推呀,遂过之。
dp[i][j]记录在i位 且 余数为j时的最优解情况。
dp[i][j].next表示当前的最优解是由哪一种状态转移过来的。
代码又写锉了。。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#pragma comment(linker, "/STACK:1024000000");
#define EPS (1e-8)
#define LL long long
#define ULL unsigned long long
#define _LL __int64
#define _INF 0x3f3f3f3f
#define Mod 9999991
using namespace std;
struct N
{
bool mark;
int ans,dig,next;
}dp[111][10000];
char s[110];
int mod1[110],mod2[110];
void Out(int site,int mod)
{
if(mod == -1)
return ;
printf("%d",dp[site][mod].dig);
Out(site+1,dp[site][mod].next);
}
int main()
{
int k,i,j,l;
while(scanf("%s %d",s+1,&k) != EOF)
{
for(i = 1; s[i] != '