hdu 4271 动态规划
思路:考的是字符串的编辑距离。在蓝桥杯2012年决赛上出现过。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int dp[][];
char targ[],ans;
int Min(int a,int b,int c)
{
int temp;
temp=a<b?a:b;
return temp<c?temp:c;
}
int getMin(char *str1,char *str2)
{
int l1,l2,i,j;
l1=strlen(str1);
l2=strlen(str2);
for(i=;i<=l2;i++)
dp[][i]=i;
int ans=l2;
for(i=;i<l1;i++)
{
for(j=;j<l2;j++)
{
if(str1[i]==str2[j])
dp[i+][j+]=Min(dp[i][j],dp[i][j+]+,dp[i+][j]+);
else
dp[i+][j+]=Min(dp[i][j+],dp[i+][j],dp[i][j])+;
}
ans=min(ans,dp[i+][l2]);
}
return ans;
}
void solve(char *str1,char *str2)
{
int i,j,l1,l2,t;
l1=strlen(str1);
l2=strlen(str2);
if(l2*<l1)
{
for(i=;i<l1;i++)
str1[i+l1]=str1[i];
str1[i+l1]='\0';
t=getMin(str1,str2);
if(t<=ans)
{
if(t==ans)
{
if(strcmp(targ,str2)>)
strcpy(targ,str2);
}
else
{
strcpy(targ,str2);
ans=t;
}
}
str1[l1]='\0';
}
else
{
char str3[];
for(i=;i<l1;i++)
{
for(j=;j<l1;j++)
{
str3[j]=str1[(i+j)%l1];
}
str3[j]='\0';
t=getMin(str3,str2);
if(t<=ans)
{
if(t==ans)
{
if(strcmp(targ,str2)>)
strcpy(targ,str2);
}
else
{
strcpy(targ,str2);
ans=t;
}
}
}
}
}
int main()
{
char str1[],str2[];
int i,j,n;
while(scanf("%s",&str1)!=EOF)
{
memset(dp,,sizeof(dp));
scanf("%d",&n);
ans=;
int t;
for(i=;i<=n;i++)
{
scanf("%s",str2);
solve(str1,str2);
}
printf("%s %d\n",targ,ans);
}
return ;
}
hdu 4271 动态规划的更多相关文章
- hdu 1087 动态规划之最长上升子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1087 Online Judge Online Exercise Online Teaching Online C ...
- HDU 1003 动态规划
http://acm.hdu.edu.cn/showproblem.php?pid=1003 这几天开始刷动归题目,先来一道签到题 然而做的并不轻松, 没有注意到边界问题, WA了几发才发现 #inc ...
- hdu 4055 && hdu 4489 动态规划
hdu 4055: 一开始我想的递推方向想得很复杂,看了别人的博客后才醍醐灌顶: 参照他的思路和代码: #include<cstdio> #include<cstring> # ...
- hdu 4745 动态规划
思路:特水的一个最长回文子序列动态规划.比赛时硬卡第一题,49WA后终于AC,可惜没时间做这题,结果成绩也就可想而知了.兔子跳一样权值的石头,并且一个正跳,一个反跳,这不就是个回文子序列吗?????! ...
- hdu 4711 动态规划
思路:其实这题是个挺水的动态规划,一开始就能AC,可是不知道错哪了,瞎改瞎交,WA了数十次.AC之后怎么改都是AC,也不知道改了什么地方,郁闷死了~~~难道开始时的测试数据有问题??? dp[i][j ...
- HDU 6076 (动态规划)
HDU 6076 Security Check Problem : 有两个长度为n的队列过安检,每个人有一个特征值.如果两个队列中的第一个人的特征值之差小于等于k,那么一次只能检查其中一个人,否则一次 ...
- HDU 1171 Big Event in HDU (动态规划、01背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hdu 4719 动态规划
思路:dp[i]表示到第i个点为结尾能获得的最大值,那么dp[i]=h[i]*h[i]+dp[i-x]-h[i-x];(i-l<=x<=i);那么我们可以转换下,以dp[i]-h[i]为新 ...
- hdu 3280 动态规划
思路:dp[i][j]表示区间i,j变为回文串最少的代价. #include<map> #include<set> #include<cmath> #include ...
随机推荐
- 浏览器判断及IE版本区分
备注:在火狐下和IE下,js的执行不一致,很多语句结果不一致,其他浏览器也可能,注意验证,多用if else包括window.onload: ①只用来区分IE和非IE内核的浏览器,由于只有IE支持Ac ...
- sessionStorage 、localStorage 和 cookie 之间的区别
sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...
- putty 中文乱码解决方法
解决putty.exe 中文乱码的问题 export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
- Oracle中decode方法的作用
DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) 该函数含义如下: IF 条件=值1 THEN RETURN (翻译值1) ELSIF 条件=值2 THEN ...
- 一些关于Block, ARC, GCD的总结
基础解释不做.基础的东西链接如下: 1. Block:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Bl ...
- C#获取程序集的版本号和最后编译时间
C#获取程序集的版本号:string ver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToStrin ...
- 【原创】省市二级联动纯javascript
// 北京 上海 天津 重庆 河北 山西 内蒙古 辽宁 吉林 黑龙江 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 四川 贵州 云南 西藏 陕西 甘肃 宁夏 青海 新疆 香港 ...
- Delphi 设置WebBrowser 代理服务器 与 UserAgent
uses UrlMon, WinInet; {----------------------------------------------------------------------------- ...
- 导出excel——入门
简单介绍 Jxl使用总结 样例 java使用jxl操作Excel文件总结
- 【WebForm】ASP.NET 使用 uploadify 上传文件
说明 ASP.NET中上传文件是很常见的一项功能,经常不用的话,可能会遗忘,为了,以后能方便的调用使用,在这里做个备份说明.最后,把做的简单的DEMO上传,方便看. 主要借鉴的这个博主的: Uploa ...