uva--10602+贪心
来源:互联网 发布:red hat linux 9 编辑:程序博客网 时间:2024/06/06 05:50
题意:
某公司开发了一个编辑器,支持两条语音命令:1.重复最后一个单词,2.删除最后一个单词的最后一个字母。给你一系列的单词,问利用编辑器的功能最少需要输入多少个字母就可以将所有单词输入;要求第一个单词一定要第一个输入,其余单词不限顺序。
思路:
输入第一个单词后,我们可以怎么样选择能使得输入的字母数最少?当然我们需要选择和第一个单词有最长公共前缀的单词;这就是贪心的策略:每次都选择和上一次输入单词有最长公共前缀的单词输入。
代码如下:
#include<iostream>#include<cstring>#include<cstdio>using namespace std;int cnt(char *str1,char *str2){ int len1=strlen(str1),i; for(i=0;i<len1;i++) if(str1[i]!=str2[i]) break; return i;}int main(){ int i,j,t,n,vis[110]; char str[110][110]; scanf("%d",&t); while(t--) { memset(vis,0,sizeof(vis)); scanf("%d",&n); for(i=1;i<=n;i++) scanf("%s",str[i]); int ans[110],k=0,sum=0,cnt1=1; ans[k++]=1; vis[1]=1; sum+=strlen(str[1]),i=1; while(1) { if(cnt1==n) break; int temp,max1=0; for(j=1;j<=n;j++) { int num=cnt(str[i],str[j]); if(!vis[j]&&num>=max1) { max1=num; temp=j; } } cnt1++; sum+=(strlen(str[temp])-max1); vis[temp]=1; ans[k++]=temp; i=temp; } printf("%d\n",sum); for(i=0;i<k;i++) printf("%s\n",str[ans[i]]); } return 0;}
0 0
- uva 10602(贪心)
- uva--10602+贪心
- EDITOR NOTTOOBAD - UVa 10602 贪心
- UVA 10602 Editor Nottoobad(贪心)
- uva - 10602 - Editor Nottoobad(贪心)
- uva:10602 - Editor Nottoobad(贪心)
- uva 10602 - Editor Nottoobad(贪心)
- UVA - 10602 Editor Nottoobad 贪心+暴力
- uva 11389(贪心)
- Uva 11100(贪心)
- uva 1388 - Graveyard(贪心)
- UVA 10037 - Bridge(贪心)
- uva 10037 - Bridge(贪心)
- Uva 10382 贪心
- UVa:10148 Advertisement(贪心)
- Commando War-uva 贪心
- UVA 10714 蚂蚁贪心
- uva 11292 贪心
- 对C++中函数原型作用域的理解
- 每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容
- 第十三周项目三—成绩处理函数版
- POJ 1129-Channel Allocation(四色定理+迭代深搜)
- 归并排序
- uva--10602+贪心
- 正则表达式基础应用(切割split(regex))
- 网站的所有页面底部多出来了一个js代码
- Hibernate Projections(投影、统计、不重复结果)
- oracle的一些操作
- php学习笔记(十四)变量
- 分布式系统的事务处理
- 第七章 复用代码 && 第八章 多态
- 你所不知道的几个经济学真相