usaco 4.3 Letter Game 搜索
2008-08-24 09:36
281 查看
简单搜索题,几乎不需要优化,直接枚举一个或者两个单词,判断其组成字符的个数是否小于给定串对应的字符个数,满足则更新答案。搜索过程中如果需要单词里的字符不再给定串里,则提前跳出。
/*
PROG: lgame
LANG: C++
ID: heben991
*/
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 60010, M = 12, L = 30;
const int value[L]={2,5,4,4,1,6,5,5,1,7,6,3,5,2,3,5,7,2,1,2,4,6,6,7,5,7};
char dict
[M], *ans
[2];
int len, n, size, l
;
int num[L], h1[L],h2[L];
int sum_value(int k)
{
int i, sum=0;
for(i = 0; i < l[k]; ++i) sum += value[dict[k][i]-'a'];
return sum;
}
int main()
{
int i, j, k, t, sum, v1, v2, ma=0;
char s[M],s1[M],s2[M],ch,*c;
freopen("lgame.dict","r",stdin);
freopen("lgame.out","w",stdout);
while(1)
{
gets(dict
);
if(dict
[0]=='.')break;
l
= strlen(dict
);
++n;
}
freopen("lgame.in","r",stdin);
gets(s);
len = strlen(s);
for(i = 0; i < len; ++i) num[s[i]-'a']++;
for(i = 0, sum = 0; i < len; ++i)
sum += value[s[i]-'a'];
for(i = 0; i < n; ++i)
{
if(l[i] > len) continue;
{
for(k = 0; k < l[i]; ++k) // < l[i], not < len
{
if(num[dict[i][k]-'a']==0) break; // -'a'
}
if(k < l[i]) continue;
for(k = 0; k < len; ++k) h1[s[k]-'a']=0;
for(k = 0; k < l[i]; ++k) h1[dict[i][k]-'a']++;
for(k = 0; k < len; ++k)
if(num[s[k]-'a']<h1[s[k]-'a'])break;
v1 = sum_value(i);
if(k==len && l[i]<=len && v1 >= ma)
{
if(v1>ma) ma = v1, size = 0;
ans[size++][0]=dict[i];
// don't continue here
}
}
{
for(j = i; j < n; ++j)
if(l[j]+l[i]<=len)
{
for(k = 0; k < l[j]; ++k)
{
if(num[dict[j][k]-'a']==0) break;;
}
if(k < l[j]) continue;
for(k = 0; k < len; ++k) h2[s[k]-'a']=0;
for(k = 0; k < l[j]; ++k) h2[dict[j][k]-'a']++;
for(k = 0; k < len; ++k)
if(num[s[k]-'a']<h1[s[k]-'a']+h2[s[k]-'a'])
{
break;
}
v2 = sum_value(j);
if(k==len && v1+v2 >= ma)
{
if(v1+v2 > ma) ma = v1+v2, size=0;
ans[size][0]=dict[i];
ans[size++][1]=dict[j];
}
}
}
}
printf("%d/n", ma);
for(i = 0; i < size; ++i)
{
printf("%s", ans[i][0]);
if(ans[i][1]) printf(" %s", ans[i][1]);
puts("");
}
return 0;
}
/*
PROG: lgame
LANG: C++
ID: heben991
*/
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 60010, M = 12, L = 30;
const int value[L]={2,5,4,4,1,6,5,5,1,7,6,3,5,2,3,5,7,2,1,2,4,6,6,7,5,7};
char dict
[M], *ans
[2];
int len, n, size, l
;
int num[L], h1[L],h2[L];
int sum_value(int k)
{
int i, sum=0;
for(i = 0; i < l[k]; ++i) sum += value[dict[k][i]-'a'];
return sum;
}
int main()
{
int i, j, k, t, sum, v1, v2, ma=0;
char s[M],s1[M],s2[M],ch,*c;
freopen("lgame.dict","r",stdin);
freopen("lgame.out","w",stdout);
while(1)
{
gets(dict
);
if(dict
[0]=='.')break;
l
= strlen(dict
);
++n;
}
freopen("lgame.in","r",stdin);
gets(s);
len = strlen(s);
for(i = 0; i < len; ++i) num[s[i]-'a']++;
for(i = 0, sum = 0; i < len; ++i)
sum += value[s[i]-'a'];
for(i = 0; i < n; ++i)
{
if(l[i] > len) continue;
{
for(k = 0; k < l[i]; ++k) // < l[i], not < len
{
if(num[dict[i][k]-'a']==0) break; // -'a'
}
if(k < l[i]) continue;
for(k = 0; k < len; ++k) h1[s[k]-'a']=0;
for(k = 0; k < l[i]; ++k) h1[dict[i][k]-'a']++;
for(k = 0; k < len; ++k)
if(num[s[k]-'a']<h1[s[k]-'a'])break;
v1 = sum_value(i);
if(k==len && l[i]<=len && v1 >= ma)
{
if(v1>ma) ma = v1, size = 0;
ans[size++][0]=dict[i];
// don't continue here
}
}
{
for(j = i; j < n; ++j)
if(l[j]+l[i]<=len)
{
for(k = 0; k < l[j]; ++k)
{
if(num[dict[j][k]-'a']==0) break;;
}
if(k < l[j]) continue;
for(k = 0; k < len; ++k) h2[s[k]-'a']=0;
for(k = 0; k < l[j]; ++k) h2[dict[j][k]-'a']++;
for(k = 0; k < len; ++k)
if(num[s[k]-'a']<h1[s[k]-'a']+h2[s[k]-'a'])
{
break;
}
v2 = sum_value(j);
if(k==len && v1+v2 >= ma)
{
if(v1+v2 > ma) ma = v1+v2, size=0;
ans[size][0]=dict[i];
ans[size++][1]=dict[j];
}
}
}
}
printf("%d/n", ma);
for(i = 0; i < size; ++i)
{
printf("%s", ans[i][0]);
if(ans[i][1]) printf(" %s", ans[i][1]);
puts("");
}
return 0;
}
相关文章推荐
- usaco 4.3 Letter Game 搜索
- USACO-Section 4.3 Letter Game (枚举)
- USACO 4.3 Letter Game(DFS)
- USACO 4.3 Letter game
- usaco 4.3 Street Race(搜索)
- USACO Section 4.3 Letter Game - 简单枚举
- USACO 4.3 Letter Game
- 08-26 HDU3812 HDU3816 USACO 4.2~4.3 搜索剪枝,模拟,DP
- 08-27~29 HDU1010 USACO4.3~4.4 搜索剪枝,模拟,拓扑,网络流
- USACO 4.3 Letter Game (字典树)
- USACO Section 4.3 Letter Game
- usaco 4.3 Letter Game 2010.8.8
- USACO 4.3 buylow
- usaco 4.3 Buy Low, Buy Lower 动态规划
- bzoj 2679: [Usaco2012 Open]Balanced Cow Subsets 折半搜索
- [USACO] 从Mother’s Milk看搜索
- USACO-Section1.3 Wormholes 【深度优先搜索】【暴力枚举】
- USACO-Section1.3 Wormholes [搜索]
- lucene4.3简单搜索示例代码
- USACO Section 4.3 Buy low,Buy lower(LIS)