其实这道题只告诉了一个事
当出现多个满足答案约束条件是,我们可以求一个再求一个,不要一下子全求完
前两个条件怎么弄之前已经做过类似的了
于是我们可以用记忆化搜索找出最小差异
然后配合最小差异来剪枝,搜索出最小答案

 var a,b:array[..] of longint;
f:array[..,..] of longint;
n,m,k,i:longint;
can:boolean;
s:string; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; function differ(j,cur:longint):longint; //f[j,cur]表示处理到第j位前面余数为cur的情况最小差异数
var i,wh,s:longint;
begin
if (j=n+) then
begin
if cur= then exit()
else exit();
end;
if f[j,cur]<>- then exit(f[j,cur]);
if j<> then s:= else s:=;
f[j,cur]:=;
for i:=s to do
begin
wh:=differ(j+,(cur*+i) mod m);
if i<>a[j] then inc(wh);
f[j,cur]:=min(f[j,cur],wh);
end;
exit(f[j,cur]);
end; procedure dfs(j,wh,cur:longint);
var i,s:longint;
begin
if (j=n+) then
begin
if cur= then can:=true;
exit;
end;
if can then exit;
if f[j,cur]+wh>k then exit; //剪枝
if j<> then s:= else s:=;
for i:=s to do
begin
b[j]:=i;
if (i=a[j]) then
dfs(j+,wh,(cur*+i) mod m)
else
dfs(j+,wh+,(cur*+i) mod m);
if can then exit;
end;
end; begin
while not eof do
begin
readln(s);
n:=length(s);
for i:= to n do
a[i]:=ord(s[i])-;
readln(m);
if s='' then
begin
writeln();
continue;
end;
fillchar(f,sizeof(f),);
k:=differ(,);
// writeln(k);
can:=false;
dfs(,,);
for i:= to n do
write(b[i]);
writeln;
end;
end.

poj3373的更多相关文章

  1. poj分类 很好很有层次感。

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

  2. 【转】POJ题目分类推荐 (很好很有层次感)

    OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...

  3. 【转】ACM训练计划

    [转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...

  4. POJ 题目分类(转载)

    Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...

  5. (转)POJ题目分类

    初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推. ...

  6. acm常见算法及例题

    转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题  初期:一.基本算法:     (1)枚举. (poj17 ...

  7. poj分类

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

  8. poj练习题的方法

    poj1010--邮票问题 DFSpoj1011--Sticks dfs + 剪枝poj1020--拼蛋糕poj1054--The Troublesome Frogpoj1062--昂贵的聘礼poj1 ...

  9. 转载 ACM训练计划

    leetcode代码 利用堆栈:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/http://oj.leetcode. ...

随机推荐

  1. SQL删除重复行和查询所有大于某成绩的语句分析

    有这样一个题,用一条SQL语句 查询出每门课都大于80分的学生姓名. 下面是表 分析,查询每门课程都大于80的学生.SELECT DISTINCT name FROM dbo.student WHER ...

  2. ubuntu下配置java环境变量

    1.官网下载linux对应的jdk安装包tar.gz 2.filezilla上传tar.gz到对应ubuntu目录test下(见上一篇) 3.解压:tar -zcvf XXX.tar.gz 4.修改解 ...

  3. sql 删除表数据truncate delete drop的区别

    已下内容为转载内容:学习之用 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. ...

  4. FTPClient文件下载

    一.FTPClient下载文件所需要的jar包: org.apache.commons.net  [commons-net-3.4.jar] 二.FTPClient的连接和关闭 //FTPClient ...

  5. 简单的背包变形HDU1203,HDU2955

    今天一直在写背包,不过中间停了一段时间在写shell. 一直在做01背包.今天做了这两题很相似的背包 首先是HDU1203 Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要 ...

  6. MFC中控件的TAB顺序 ----转载

    在MFC中添加控件后,按Ctrl+d可以改变控件TAB顺序,怕自己忘了,一个神奇的东西,记下. 关于改变Tab顺序的方法有以下几种: 方法一:在动态创建控件的时候STYLE设置成为WS_CHILD|W ...

  7. jQuery提供的小方法

    jQuery提供的小方法: 1.选择器 + 事件 + 函数 = 复杂的交互 2.循环处理与选择器匹配的各个元素:each() $("#").each(function(){     ...

  8. ServletContext全局变量初始化

    Java部分 package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.ser ...

  9. linux源码“.config”文件分析

    一..config文件概述 .config文件是linux内核配置文件,当执行#make uImage编译生成内核时,顶层的Makefile会读取.config文件的内容,根据这个配置文件来编译所定制 ...

  10. 原生js实现tab选项卡里内嵌图片滚动特效代码

    <!DOCTYPE HTML><html lang="en-US"><head><meta charset="UTF-8&quo ...