poj3373Changing Digits(dp)
dfs倒着搜 返回的路径不能满足相同的数最多 借鉴了下别人的代码。。
先dp出来 再倒着标记一下 然后正回来一定可以满足了
dp保存的是最小的不相同数
- #include <iostream>
- #include<cstdio>
- #include<cstring>
- #include<stdlib.h>
- #include<algorithm>
- using namespace std;
- #define INF 0xfffffff
- int dp[][];
- char s[];
- int flag,path[],k,m,pp[],f[][];
- int main()
- {
- int i,j,g;
- while(scanf("%s%d",s,&m)!=EOF)
- {
- k = strlen(s);flag=;
- memset(f,,sizeof(f));
- for(i = ; i <= k ; i++)
- for(j = ; j <= m ; j++)
- dp[i][j] = INF;
- if(k==)
- {
- printf("%c\n",s[]);
- continue;
- }
- for(i = ; i <= ; i++)
- {
- if(i==s[]-'')
- dp[][i%m] = min(dp[][i%m],);
- else
- dp[][i%m] = min(dp[][i%m],);
- }
- for(i = ; i < k ; i++)
- for(j = ; j<m ; j++)
- {
- if(dp[i][j] == INF) continue;
- for(g = ; g <= ; g++)
- {
- int o;
- if(g==s[i]-'')
- o = ;
- else
- o = ;
- dp[i+][(j*+g)%m] = min(dp[i+][(j*+g)%m],dp[i][j]+o);
- }
- }
- f[k][] = ;
- for(i = k- ; i>= ; i--)
- for(j = ; j < m ; j++)
- {
- if(dp[i][j]==INF) continue;
- for(g = ; g <= ; g++)
- {
- int o;
- if(g==s[i]-'')
- o = ;
- else
- o = ;
- if(dp[i][j]+o==dp[i+][(j*+g)%m]&&f[i+][(j*+g)%m])
- {
- f[i][j] = ;
- }
- }
- }
- int ss;
- for(i = ; i < ; i++)
- {
- int o;
- if(i==s[]-'')
- o = ;
- else
- o = ;
- if(f[][i%m]&&dp[][i%m]==o)
- {
- printf("%d",i);
- ss = i%m;
- break;
- }
- }
- for(i = ; i <= k ;i++)
- {
- for(g = ; g <= ; g++)
- {
- int o;
- if(g==s[i-]-'')
- o = ;
- else
- o = ;
- if(f[i][(ss*+g)%m]&&dp[i][(ss*+g)%m]==dp[i-][ss]+o)
- {
- printf("%d",g);
- ss = (ss*+g)%m;
- break;
- }
- }
- }
- puts("");
- }
- return ;
- }
poj3373Changing Digits(dp)的更多相关文章
- URAL 1658. Sum of Digits(DP)
题目链接 隔了一年零三个月,重新刷URAL,这题挺麻烦的输出路径.输出路径挺扯的,乱写了写乱改改就A了...我本来想用很靠谱,记录每一条路径的,然后输出最小的,结果Tle,然后我使劲水水又过了一组,发 ...
- POJ 3373 Changing Digits(DP)
题目链接 记录路径的DP,看的别人的思路.自己写的也不好,时间居然2000+,中间的取余可以打个表,优化一下. 写的各种错,导致wa很多次,写了一下午,自己构造数据,终于发现了最后一个bug. dp[ ...
- URAL1658. Sum of Digits(DP)
链接 这题卡了挺久了 昨天试着用类似dfs的方法直接TLE在第二组 看了下题解,,发现s1,s2的范围是个幌子..100位最大的s1900 s28100 觉得s1s2太大不敢开二维.. 这样就简单了 ...
- poj3373--Changing Digits(DFS+剪枝///记忆化)
题目链接:点击打开链接 题目大意:给出一个n和一个k 求m 要求1.m要和n相同的位数 要求2.m要整除k 要求3.如果1和2满足,那么m要和n有尽量少的不同位 要求4.如果1.2.3满足,要使m尽量 ...
- Leetcode: Count Numbers with Unique Digits
Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. Examp ...
- F. Igor and Interesting Numbers
http://codeforces.com/contest/747/problem/F cf #387 div2 problem f 非常好的一道题.看完题,然后就不知道怎么做,感觉是dp,但是不知道 ...
- Odoo小数精度及货币精度详解
一.小数精度的设置 一般在设置-数据结构-精度设置中就可以对 小数类型的字段进行精度设置: 对于代码中定义为 digits=dp.get_precision('Product Price') 或 di ...
- 2017.7.4 ACM校内赛 Round 2
这是一个向导 A - hdu 3652 B - bzoj 4152 C - bzoj 2429 D - bzoj 1087 E - bzoj 1566 F - bzoj 4043 G - bzoj 1 ...
- odoo小数精确度
python round() 函数 Python用于四舍五入的内建函数round() ,它的定义为 意思是, 将 小数部分保留到 ndigits 指定的 小数位,也就是 精度保持到 ndigi ...
随机推荐
- 01线性表顺序存储_List--(线性表)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...
- Markdown編輯器
MarkDown编辑器 一.什么是Markdown编辑器 二.怎么使用Markdown编辑器 1.标题/Head 2.超链接/Link/Reference ②自動的郵件連結也很類似,只是Markdow ...
- 暑假集训(2)第四弹 ----- 敌兵布阵(hdu1166)
D - 敌兵布阵 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64bit ...
- C++ map.insert 传参类型不同,构造/析构次数不同
1. 传参方式 使用 insert 为 map 插值时,insert 的传参包含以下几种可能: make_pair 生成对象 pair(key_type, value_type) 生成对象 pair( ...
- CentOS7 yum安装配置
一.安装必要包 yum install gcc 二.linux下安装 #下载 wget http://download.redis.io/releases/redis-3.0.0.tar.gz tar ...
- Html盒子模型学习总结
Html的盒子模型 1.总的来说Html元素可以分为两类:即块状元素和行内元素. 2.块状元素(Block)类型的元素可以设置Width和Height值属性,而行内(Inline)类型无效. 3.浏览 ...
- Cassandra1.2文档学习(3)——数据分配和复制
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...
- 创建一个cocos2d-x工程添加一个自定义Scene并显示
#include "cocos2d.h" class RunScene :public cocos2d::CCLayer { public: virtual bool init() ...
- PHP学习笔记(3) - 奇怪的class与autoload
PHP的class与其他语言有很多不同点.PHP允许很奇葩的在静态方法中调用实例方法,提供了关键字self和static用于访问类自身的静态成员.self永远是指当前的类,而static则可能会变成指 ...
- CentOS安装SetupTools(easy_install)
确保Py版本在2.6或以上 (旧版本需升级或参考旧版本安装) cd /opt wget https://pypi.python.org/packages/source/s/setuptools/set ...