poj3373--Changing Digits(DFS+剪枝///记忆化)
题目链接:点击打开链接
题目大意:给出一个n和一个k 求m
要求1、m要和n相同的位数
要求2、m要整除k
要求3、如果1和2满足,那么m要和n有尽量少的不同位
要求4、如果1、2、3满足,要使m尽量的小
简单的一个深搜,但是直接被要求吓蒙,,,,,
要求1和2直接可以在搜索时判断,要求3可以在深搜时给出可以改变的位数(有0到len(n)),而要求4需要控制在搜索是要从小的开始搜,即从100000到999999,因为在深搜之前就控制了可以改变的次数,所以在搜索时不用担心要求3,只要使要求1要求2满足就可以,那么搜到的第一个就是最小的。
注意剪枝:
1、在每一次变化后都要直接计算出余数,当余数为0时,返回1,而不是一定要搜到最后一位。
mod[i][j] = (j*10^i)%k
2、flag[i][j]当搜到第i位余数为j时,没有找到结果的(修改位数),当以后遇到修改位数<=flag[i][j]时直接返回0。
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; char str[];
int k,len,a[];
int mod[][];
int flag[][];
void init(){
for(int j=;j<;j++)
mod[][j]=j%k;
for(int i=;i<;i++)
for(int j=;j<;j++)
mod[i][j]=mod[i-][j]*%k;
} int dfs(int num,int pos,int s){
if(s == ) return ;
if(num == || pos == -) return ;
if(num <= flag[pos][s]) return ;
int temp ;
for(int i=;i<=;i++){
if(pos == len- && i == ) continue;
if(i<a[pos]){
temp=a[pos]-i;
a[pos]=i;
if(dfs(num-,pos-,(s-mod[pos][temp]+k)%k)) return ;
a[pos]+=temp;
}
else if(i == a[pos]){
if(dfs(num,pos-,s)) return ;
}
else{
temp=i-a[pos];
a[pos]=i;
if(dfs(num-,pos-,(s+mod[pos][temp])%k)) return ;
a[pos]-=temp;
}
}
flag[pos][s]=max(flag[pos][s],num);
return ;
} int main(){
int i,j,s,temp;
while(scanf("%s %d",str,&k)!=EOF){
memset(flag,-,sizeof(flag));
len=strlen(str);
for(i=len-;i>=;i--){
a[len--i]=str[i]-'' ;
}
init();
for(i=s=temp=;i<len;i++){
s=(mod[i][a[i]]+temp)%k ;
temp=s;
}
for(i=;i<=len;i++){
if(dfs(i,len-,s)) break;
}
for(i=len-;i>=;i--)
printf("%d",a[i]);
printf("\n");
}
return ;
} /*
535064
9084
535956 19169 15724
15724 3902 153
3978
*/
代码快来拿
poj3373--Changing Digits(DFS+剪枝///记忆化)的更多相关文章
- poj 1088 动态规划+dfs(记忆化搜索)
滑雪 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Description Mi ...
- 从DFS到记忆化DFS到动态规划
什么是动态规划? 动态规划(Dynamic Programming)是通过组合子问题的解来解决问题的.动态规划是用于求解包含重叠子问题的最优化问题的方法.其基本思想是,将原问题分解为相似的子问题.在求 ...
- poj 3373 Changing Digits (DFS + 记忆化剪枝+鸽巢原理思想)
http://poj.org/problem?id=3373 Changing Digits Time Limit: 3000MS Memory Limit: 65536K Total Submi ...
- 最大联通子数组之和(dfs,记忆化搜索,状态压缩)
最大联通子数组,这次的题目,我采用的方法为dfs搜索,按照已经取到的数v[][],来进行搜索过程的状态转移,每次对v[][]中标记为1的所有元素依次取其相邻的未被标记为1的元素,将其标记为1,然而,这 ...
- poj 1088 滑雪 DP(dfs的记忆化搜索)
题目地址:http://poj.org/problem?id=1088 题目大意:给你一个m*n的矩阵 如果其中一个点高于另一个点 那么就可以从高点向下滑 直到没有可以下滑的时候 就得到一条下滑路径 ...
- Codeforces 374 C. Travelling Salesman and Special Numbers (dfs、记忆化搜索)
题目链接:Travelling Salesman and Special Numbers 题意: 给了一个n×m的图,图里面有'N','I','M','A'四种字符.问图中能构成NIMA这种序列最大个 ...
- Java实现 LeetCode 813 最大平均值和的分组 (DFS+DP记忆化搜索)
813. 最大平均值和的分组 我们将给定的数组 A 分成 K 个相邻的非空子数组 ,我们的分数由每个子数组内的平均值的总和构成.计算我们所能得到的最大分数是多少. 注意我们必须使用 A 数组中的每一个 ...
- kuangbin专题十二 HDU1078 FatMouse and Cheese )(dp + dfs 记忆化搜索)
FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- NYOJ skiing(DFS+记忆化搜索)
skiing 时间限制:3000 ms | 内存限制: ...
随机推荐
- SQLyog 最新版本12.5-64bit 完美破解,亲测可用!
声明:本文只是提供一个网络上找到的针对12.5版本的注册码使用方式做一个说明,不建议企业用户破解,有条件的还是希望大家购买原版.当然个人学习用的但又不想购买原版的,这里只是提供个途径,请勿用做商业用途 ...
- python学习:注释、获取用户输入、字符串拼接、运算符、表达式
注释 #为单行注释'''三个单引号(或者"""三个双引号)为多行注释,例如'''被注释的内容''' '''三个单引号还可以起到多行打印的功能. #ctrl+? 选中的多行 ...
- 红帽 Red Hat Linux相关产品iso镜像下载【百度云】【更新7.2】
RedHat Enterprise Server 6.7 for i386 Boot Disk:rhel-server-6.7-i386-boot.iso SHA-256 Checksum: 798d ...
- angular.equals()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- oldboy es和logstash
logstash: input:https://www.elastic.co/guide/en/logstash/current/input-plugins.html input { file { p ...
- centos中安装配置nginx完成之后主机无法访问
原因 VMware中安装centos7,安装配置完成nginx后,主机无法访问.虚拟机没有放行Nginx默认端口80. 解决办法 首先:开启 web 端口 firewall-cmd --permane ...
- javascript的数组之splice()
splice()方法通过删除现有元素和/或添加新元素来更改一个数组的内容.修改数组自身 var months = ['Jan', 'March', 'April', 'June']; months.s ...
- kubernetes in action - Services
问题,如何将Pod所提供的功能提供给别人用?微服务,是服务,所以关键要把服务提供出去 直接把pod的静态ip提供给用户用,这个会有很多问题,比如failover,扩容,负载均衡等 所以需要servic ...
- delphi 自动获取串口
delphi 自动获取串口 https://blog.csdn.net/Nevermore_anger/article/details/79012875 版权声明:本文为博主原创文章,未经博 ...
- 安卓点击home键重启
主要原因是:每次启动Intent导致新创建Task的时候,该Task会记录导致其创建的Intent:而如果后续需要有一个新的与创建Intent完全一致(完全一致定位为:启动类,action.categ ...