遗忘口令

题目描述
就像每个人都会遇到的问题一样,贝西忘了在cowtube 上的口令。不过,她还记着一些关于口令
的信息。首先,她确定口令由小写字母组成,长度为L。其次,这个密码是由几个单词组合而成
的。贝西一共认识N 个单词,每个单词长度都在1 到20 之间,由小写字母组成。最后,贝西还
记得口令上一些位置的字母,她会尽量提供记住的部分,如果有些位置上的字母不记得了,就用?
代替。
给定贝西记得的口令片段和她认识的单词列表,请恢复出她的口令,如果完全符合条件的口令不
止一个,输出按照字典序排在最前面的那个。
输入
第一行:两个用空格分开的整数:L 和N,1≤L≤1000,1≤N≤1000
第二行:一个L 长的字符串,代表口令P
第三行到N+2 行:第i+2 有一个字符串W_i,表示贝西认识的第i 个单词W_i
输出
第一行:一个字符串,表示符合条件的,在字典序下最靠前的口令
样例输入
15 6
a??l?ban???????
apple
cow
farmer
banana
bananas
pies
样例输出
Applebananapies
样例解释
(有两个可行的组合,一个是applebananapies,还有一个是applebananascow,前者较靠前)
数据规模
对于30% 的数据,有1 ≤ L,N≤ 30。

对于100% 的数据,有1 ≤ L,N≤ 1, 000。


把主串抽象为背包,单词抽象为物品,题目就变成,选若干个物品,正好“装满”容量为L的背包,并且使总价值最小,因为每个单词可以重复使用,所以这还是一个完全背包。

在完全背包中,设f[i]表示背包容量为i时最小的价值,状态转移方程为f[i]=min(f[i],f[i-w[j]]+v[j])。在这个问题中,f[i]就是当主串长度为i时,字典序最小的主串,w[j]表示该单词的长度,f[i-w[j]]+v[j]表示把单词串加到主串的末尾。

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#define f(i,l,r) for(i=(l);i<=(r);i++)
using namespace std;
const int MAXN=1005;
string a[MAXN],f[MAXN];
int L,n;
string Min(string a,string b)
{
	return a<b?a:b;
}
int main()
{
//	freopen("forgot.in","r",stdin);
//	freopen("forgot.out","w",stdout);
	int i,j,k;
	scanf("%d%d",&L,&n);
	f(i,0,n){
		cin>>a[i];
	}
	f(i,1,L){
		f(j,1,n){
			int l=a[j].length();
			if(l>i||(f[i-l]==""&&i-l!=0)) continue;      //如果f[i-l]不能够填满,那就不能转移,而f[0]为边界 
			f(k,i-l+1,i){
				if(a[0][k-1]!='?'&&a[0][k-1]!=a[j][k-i+l-1])	break;
			}
			if(k==i+1){
				if(f[i]=="") f[i]=f[i-l]+a[j];
				else         f[i]=Min(f[i],f[i-l]+a[j]);
			}
		}
	}
	cout<<f[L]<<endl;
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 口令管理是指对 Oracle 数据库用户的密码进行管理和保护的过程。以下是一些关于 Oracle 口令管理的常见问题和最佳实践: 1. 如何创建和修改口令? - 创建用户时,应该设置一个强密码,并确保密码复杂度要求得到满足。 - 使用 ALTER USER 语句可以修改用户的口令。 - 启用密码过期功能,要求用户在一定时间后更改密码。 2. 如何强化口令安全性? - 密码应该包含足够的长度和复杂性,包括大写字母、小写字母、数字和特殊字符。 - 避免使用常见的词典单词或简单的密码组合。 - 禁止用户重复使用之前使用过的密码。 - 设置口令锁定策略,限制登录尝试次数。 3. 如何保护口令的机密性? - 不要以明文形式存储口令,而是使用哈希算法进行加密。 - 使用 SSL/TLS 加密通信,以防止密码在传输过程中被窃取。 - 限制对存储口令的敏感表格的访问权限,只允许授权用户进行访问。 4. 如何定期更新口令? - 强制用户定期更改密码,以防止长期使用同一密码。 - 设置密码过期策略,强制用户在一定时间后更改密码。 5. 如何监控和检测口令安全问题? - 启用审计功能,记录用户对口令的更改和登录活动。 - 监控账户锁定和解锁事件,以及密码重试失败事件。 - 实施安全策略和监控机制,及时检测和响应异常活动。 总之,Oracle 口令管理的目标是确保数据库用户的密码安全性,并采取适当的措施来保护口令的机密性和完整性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值