题目链接

记录路径的DP,看的别人的思路。自己写的也不好,时间居然2000+,中间的取余可以打个表,优化一下。

写的各种错,导致wa很多次,写了一下午,自己构造数据,终于发现了最后一个bug。

dp[i][j]表示前i位取余得到j,需要最少改变多少位。

这样可以得到最少改变多少位了,但是,还要保证,最小。学习别人的题解,开一个标记数组,先从后倒回来,把这些可以达到最小的路径都记录下来。

然后再从头找最小的那一条路径。这样就能保证,最小了。

 #include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define INF 100000000
int dp[][];
bool o[][];
int que[];
int main()
{
int i,j,k,n,m,t,z,pos;
char str[];
while(scanf("%s%d",str,&m)!=EOF)
{
n = strlen(str);
if(n == )
{
if((str[]-'')%m == )
printf("%d\n",str[]-'');
else
printf("0\n");
continue;
}
for(i = ; i < n; i ++)
{
for(j = ; j < m; j ++)
{
dp[i][j] = INF;
o[i][j] = ;
}
}
for(i = ; i < ; i ++)
{
t = i%m;
if(i == str[]-'')
z = ;
else
z = ;
dp[][t] = min(dp[][t],z);
}
for(i = ; i < n-; i ++)
{
for(j = ; j < m; j ++)
{
if(dp[i][j] == INF) continue;
for(k = ; k < ; k ++)
{
if(k == str[i+]-'')
z = ;
else
z = ;
dp[i+][(j*+k)%m] = min(dp[i+][(j*+k)%m],dp[i][j]+z);
}
}
}
o[n-][] = ;
for(i = n-; i >= ; i --)
{
for(j = ; j < m; j ++)
{
if(dp[i][j] == INF) continue;
for(k = ; k < ; k ++)
{
if(k == str[i+]-'')
z = ;
else
z = ;
if(dp[i+][(j*+k)%m] == dp[i][j]+z&&o[i+][(j*+k)%m])
{
o[i][j] = ;
}
}
}
}
for(i = ; i < ; i ++)
{
t = i%m;
if(i == str[]-'')
z = ;
else
z = ;
if(o[][t]&&dp[][t] == z)
{
printf("%d",i);
pos = t;
break;
}
}
for(i = ;i < n;i ++)
{
for(j = ;j < ;j ++)
{
if(j == str[i]-'')
z = ;
else
z = ;
if(o[i][(pos*+j)%m]&&dp[i][(pos*+j)%m] == dp[i-][pos]+z)
{
printf("%d",j);
pos = (pos*+j)%m;
break;
}
}
}
printf("\n");
}
return ;
}

POJ 3373 Changing Digits(DP)的更多相关文章

  1. poj 3373 Changing Digits (DFS + 记忆化剪枝+鸽巢原理思想)

    http://poj.org/problem?id=3373 Changing Digits Time Limit: 3000MS   Memory Limit: 65536K Total Submi ...

  2. POJ 3373 Changing Digits 好蛋疼的DP

    一開始写的高位往低位递推,发现这样有些时候保证不了第四条要求.于是又開始写高位往低位的记忆化搜索,又发现传參什么的蛋疼的要死.然后又发现高位開始的记忆化搜索就是从低位往高位的递推呀,遂过之. dp[i ...

  3. POJ 3373 Changing Digits

    题目大意: 给出一个数n,求m,使得m的长度和n相等.能被k整除.有多个数符合条件输出与n在每位数字上改变次数最小的.改变次数同样的输出大小最小的.  共同拥有两种解法:DP解法,记忆化搜索的算法. ...

  4. POJ 3373 Changing Digits 记忆化搜索

    这道题我是看了别人的题解才做出来的.题意和题解分析见原文http://blog.csdn.net/lyy289065406/article/details/6698787 这里写一下自己对题目的理解. ...

  5. POJ.3624 Charm Bracelet(DP 01背包)

    POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...

  6. POJ 2995 Brackets 区间DP

    POJ 2995 Brackets 区间DP 题意 大意:给你一个字符串,询问这个字符串满足要求的有多少,()和[]都是一个匹配.需要注意的是这里的匹配规则. 解题思路 区间DP,开始自己没想到是区间 ...

  7. poj 3254 状压dp入门题

    1.poj 3254  Corn Fields    状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相 ...

  8. POJ 1260 Pearls 简单dp

    1.POJ 1260 2.链接:http://poj.org/problem?id=1260 3.总结:不太懂dp,看了题解 http://www.cnblogs.com/lyy289065406/a ...

  9. poj 1463 Strategic game DP

    题目地址:http://poj.org/problem?id=1463 题目: Strategic game Time Limit: 2000MS   Memory Limit: 10000K Tot ...

随机推荐

  1. Linux时间同步配置方法

    由于是在做mongoDB的实验中再一次的遇到了mongos路由节点同步时由于ntp时间的问题导致同步非常的慢.故写了个时间同步的语句===> while :; do rdate -s 192.1 ...

  2. No bootable device-insert boot disk and press any key

    macbook air 2012 mid. 长按关机键关机,按开机键,然后长按option键,会出现可以选择启动的磁盘块,选择要启动的磁盘进入即可.

  3. Android Studio中的Module,Facet

    详细内容请参看 http://www.jetbrains.com/idea/webhelp/facet.html 以及 http://www.jetbrains.com/idea/webhelp/an ...

  4. Windows下使用命令行设置ip地址的DNS服务器

    使用命令行或者编写bat批处理设置网络连接的IP地址以及DNS服务器地址有时候会比手动更加方便,IP地址和DNS的设置一般是配合的,常用到的几个状态是: 1.IP地址动态获取,DNS也动态 2.IP地 ...

  5. Win7下虚拟机个人使用小结:Virtual PC,VMware和VirtualBox

    想来用了很多年的虚拟机了,换了Win7之后,种种原因又需要使用虚拟机,这里就简单介绍和比较一下. 点击小图看大图. Virtual PC: 如果想做Windows虚拟机的话,Virtual PC在之前 ...

  6. 六间房PK同时观看两方视频(绕过VIP限制)+直播状态批量监测

    可交换两个视频位置,记住最后播放记录,游客VIP限制也能观看视频等功能. 使用方法: 1.先运行 6.cn.live.exe 分别打开两个主播房间的网页(VIP限制也能获取视频的文件名) (房间已满提 ...

  7. IOS多线程(NSOperation,NSOperationQueue)

    含义:NSOperation,NSOperationQueue是什么. The NSOperation class is an abstract class you use to encapsulat ...

  8. java代码获取jdbc链接properties

    public static String getDirPath() { Resource resource = null; Properties props = null; String driver ...

  9. HDU 2082 母函数模板题

    找单词 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status De ...

  10. Java操作Session与Cookie

    1,Java操作Session Java操作Session非常简单,步骤如下 1.1,在servlet中通过request获取session HttpSession session = request ...