题目链接

记录路径的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. Java--时间处理

    package javatest; import java.text.SimpleDateFormat; import java.util.Date; class timeTest{ public s ...

  2. object-c 继承多态 动态数据类型

    在c#中我们知道有继承的.同样在object-c中也有继承. 例如我们写一个人类(父),一个学生类.我们可以这么写: demo: @interface Person:NSobject{ NSStrin ...

  3. iOS8 UILocalNotification 和 UIRemoteNotification 使用注意 草稿,正在整理中。。。。

    先说一个关于UILocalNotification的知识点,容易被忘记: Each app on a device is limited to 64 scheduled local notificat ...

  4. 将Excel文件.xls导入SQL Server 2005

    SQL2005 Microsoft SQL Server Management Studio Express管理器里,右键单击一个数据库,指向“任务”,再单击“导入数据”或“导出数据”中没有这个选项, ...

  5. 现在不能使用foxmail同步qq记事本功能,可能是对字数的大小有限制

    那么在经过了两个星期的时间完成的主要功能就是幻灯片和站点管理,在之后还有更多的任务要做,本来从时间的安排上不太合理,在这个月底要基本完成,主要是其他的组员也有比较重的任务,那么就是需要随时有一个状态, ...

  6. Redis笔记(三)Redis的数据类型

    前面说过,Redis的一大特性是支持丰富的数据类型, 这为更多的应用场景提供了可能. Redis有五种数据类型,包括string,list,set,sorted set和hash,注意,Redis的数 ...

  7. 菜鸟学Linux命令:grep配合ls等使用

    linux grep命令 (global search regular expression(RE) and print out the line )是一种强大的文本搜索工具,它能使用正则表达式搜索文 ...

  8. Web服务器原理及简单实现

    Web系统由客户端(浏览器)和服务器端两部分组成.Web系统架构也被称为B/S架构.最常见的Web服务器有Apache.IIS等,常用的浏览器有IE.Firefox.chrome等.当你想访问一个网页 ...

  9. 【Android 进阶】临时卸载root和恢复root功能

    [前言]为什么有这个需求? Q:首先,谈谈为啥想要root呢? A:有root才能有控制权,也才能折腾很多东西,比如:删删流氓软件,用用代理.软件自动安装等: Q:然后,那么为何又需要删除root呢? ...

  10. Linux 内核中断内幕

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/index.html#resources Linux 内核中断内幕 ...