USACO 2.3

Longest Prefix最长前缀

dp

直接贴代码了...

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <algorithm>
 5 #include <cstring>
 6 #include <string>
 7 #include <set>
 8 using namespace std;
 9 set<string>s;
10 string p;
11 int main()
12 {
13     freopen("prefix.in","r",stdin);
14     freopen("prefix.out","w",stdout);
15     s.clear();
16     int maxlen=0;
17     cin>>p;
18     int f[200100]={false};
19     f[0]=true;
20     int ans=0;
21     int len;
22     while(p!=".")
23     {
24         len=p.length();
25         maxlen=max(maxlen,len);
26         s.insert(p);
27         cin>>p;
28     }
29     p="";
30     char c[200100];
31     while(scanf("%s",&c)!=EOF)
32         p=p+string(c);  
33     len=p.length();
34     p=" "+p; 
35     for(int i=1;i<=len;i++)
36         for(int j=i;j>=i-maxlen+1;j--)  
37         {
38             if(j<1)
39                 break;
40             string t=p.substr(j,i-j+1);
41             if(s.count(t))
42             {
43                 f[i]=(f[j-1])||(f[i]);
44                 if((i>ans)&&(f[i]))
45                     ans=i;
46                 if(f[i])
47                     break;
48                 
49             }
50         }
51     printf("%d\n",ans);
52 }

 

 

 

 

zerosum

dfs ..就是字符串比较烦......

Money Systems货币系统

完全背包.....

Controlling Companies 控制公司

我打的很暴力  直接暴力枚举了 ....  差点超时  就是不停更新维护 他们之间互相控制的数组.....

 

 

 

转载于:https://www.cnblogs.com/xujian9502/archive/2012/04/25/2470571.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值