SRM 556 DIV2

250.

找最长无重复子串。

500.

从val的范围入手(0~1023),bfs。

View Code
 1 /*
 2 Author:Zhaofa Fang
 3 Lang:C++
 4 */
 5 #include <cstdio>
 6 #include <cstdlib>
 7 #include <iostream>
 8 #include <cmath>
 9 #include <cstring>
10 #include <algorithm>
11 #include <string>
12 #include <vector>
13 #include <queue>
14 #include <stack>
15 #include <map>
16 #include <set>
17 using namespace std;
18 
19 #define  pii pair<int,int>
20 
21 int dp[55][1024];
22 typedef long long ll;
23 class XorTravelingSalesman
24 {
25     public:
26 
27     int maxProfit(vector <int> val, vector <string> road)
28     {
29         
30         int n=val.size();
31         memset(dp,0,sizeof(dp));
32         dp[0][val[0]]=true;
33         queue<pii> q;
34         q.push(pii(0,val[0]));
35         while(!q.empty())
36         {
37             pii now=q.front();q.pop();
38             for(int i=0;i<n;i++)
39             {
40                 if(road[now.first][i] == 'Y')
41                 {
42                     int v=(now.second^val[i]);
43                     if(dp[i][v] == false)
44                     {
45                         dp[i][v]=true;
46                         q.push(pii(i,v));
47                     }
48                 }
49             }
50         }
51         for(int i=1023;i>=0;i--)
52         {
53             for(int j=0;j<n;j++)
54             {
55                 if(dp[j][i])return i;
56             }
57         }
58         return val[0];
59     }
60 };

转载于:https://www.cnblogs.com/fzf123/archive/2012/09/14/2684710.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值