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 ...
随机推荐
- android 权限总结
1.拨打电话要权限 2.sd目录存东西要权限
- Microsoft Word Regular Expression
Microsoft Word Regular Expression Word裏的正則表達式-不一樣的符號. 一.Normal Find and Replace 二.Search by using wi ...
- memcached全面剖析--3
memcached的删除机制和发展方向 下面是<memcached全面剖析>的第三部分. 发表日:2008/7/16 作者:前坂徹(Toru Maesaka) 原文链接:http://gi ...
- DataGridView 绑定数据后修改列类型
dataGridView1.DataSource = dt; dataGridView1.Columns.RemoveAt(); //删除要被替换的列 DataGridViewLinkColumn l ...
- Chrome 将默认不播放非重要 Flash 内容
Chrome 45将不再自动播放Flash,可能是45以后的版本都不自动播放了,没有具体测试. 小尺寸flash不被chrome播放,需要手动点击才能播放如何解决: <p>1.同域名fla ...
- [HTML]img标签属性
<img src="image.png" width="" height="" align="absmiddle" ...
- JDK和Jython安装
下载JAVA SE,下载地址请到oracle官方网站下载. JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...
- WPF读书笔记 x名称空间详解(第二天)
每天看一点,每天进步一点. x名称空间映射的是http://schemas.microsoft.com/winfx/2006/xaml,它包含的类均与解析XAML语言关,亦可称为"XAML名 ...
- post请求json内容丢失问题
今天在项目组用json传输数据 post方法提交 发现传输过去的数据json内的+ 号被直接干掉了. 后来传输之前直接先编码. 接收端: public void ProcessRequest(Http ...
- poj 3250 Bad Hair Day 单调栈入门
Bad Hair Day 题意:给n(n <= 800,000)头牛,每头牛都有一个高度h,每头牛都只能看到右边比它矮的牛的头发,将每头牛看到的牛的头发加起来为多少? 思路:每头要进栈的牛,将栈 ...