//九度1082 动态规划之 代理服务器

来源:互联网 发布:淘宝保价是什么意思 编辑:程序博客网 时间:2024/06/05 06:32
//九度1082 动态规划之 代理服务器//http://ac.jobdu.com/problem.php?pid=1082//Tip:其实这个题用贪心很简单的……不过为了练习动态规划,自己想了个动态规划的解法……与支持我的亲共勉……#include<stdio.h>#include<string.h>char daili[1001][20];char fangwen[5001][20];int mm[1001][5001];int main(){int i,j,min,mino,flag,temp,m,n;while(~scanf("%d",&n)){if(n==1){flag=1;scanf("%s",daili[0]);scanf("%d",&m);for(j=0;j<m;j++)scanf("%s",fangwen[j]);for(j=0;flag&&j<m;j++)flag=strcmp(fangwen[j],daili[0]);//flag==0的时候,找到相等的了,跳出循环了if(flag)printf("0\n");//一直不存在相等的else printf("-1\n");continue;//只有一个代理的情况下处理完了}for(i=1;i<=n;i++)scanf("%s",daili[i]);scanf("%d",&m);for(j=1;j<=m;j++)scanf("%s",fangwen[j]);for(i=1;i<=n;i++){mm[i][m]=(strcmp(fangwen[m],daili[i])==0);if(!mm[i][m])min=i;//min标记刚遍历过的数组中最小的那个位置。}for(j=m-1;j;j--){for(i=mino=1;i<=n;i++){if(strcmp(fangwen[j],daili[i]))//代理跟访问不相等时,可以安全访问,不需切换{mm[i][j]=mm[i][j+1];}else {mm[i][j]=mm[min][j+1]+1;}if(mm[i][j]<mm[mino][j])mino=i;//mino标记如今现阶段在遍历的最小值。}min=mino;//继续往前遍历,min值被赋予mino的值;}printf("%d\n",mm[min][1]);}return 0;}

原创粉丝点击