2 00?0 1 2 4 8 ???? 1 2 4 8
Case #1: 12 Case #2: 15Hinthttps://en.wikipedia.org/wiki/Gray_code http://baike.baidu.com/view/358724.htm
//#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cmath> #include<stdlib.h> #include<map> #include<set> #include<time.h> #include<vector> #include<queue> #include<string> #include<string.h> #include<iostream> #include<algorithm> using namespace std; #define eps 1e-8 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) typedef pair<int , int> pii; #define maxn 200000 int a[maxn]; char s[maxn]; int d[maxn][2]; int n; int ans; int main() { int T; int kase = 0; scanf("%d", &T); while(T--) { scanf("%s", s + 1); n = strlen(s + 1); for(int i = 1; i <= n; i++) scanf("%d", a + i); for(int i = 0; i <= n; i++) d[i][0] = d[i][1] = -INF; d[0][0] = 0; for(int i = 1; i <= n; i++) { if(s[i] == '?') { d[i][0] = max(d[i-1][0], d[i-1][1] + a[i]); d[i][1] = max(d[i-1][1], d[i-1][0] + a[i]); } else { int t = s[i] - '0'; d[i][t] = max(d[i-1][t], d[i-1][t^1] + a[i]); } } // for(int i = 0; i <= n; i++) // { // printf("(%d---%d)\n", d[i][0], d[i][1]); // } ans = -INF; ans = max(d[n][0], d[n][1]); printf("Case #%d: %d\n", ++kase, ans); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/dojintian/article/details/47450973