#include <cstdio>#include <iostream>#include <algorithm>#include <queue>#include <cmath>#include <cstring>#include <stack>#include <set>#include <map>#include <vector>using namespace STD;#define INF 0X2FFFFFFF#define LL Long Long#define MAX (A, B) ((a) > (a))? (a):(B)#define MIN (a) < (b))? (a):(B)Chara[200005];intb[200005]; LL dp[200005][2];intMain () {intTCin>> T;intT =1; while(t--) {scanf('%s ', a);memset(DP,0,sizeof(DP));intLen =strlen(a); for(inti =0; i < len;i++) {scanf("%d", &b[i]); }if(a[0]=='? ') {dp[0][1] = b[0]; dp[0][0] =0; }if(a[0]==' 1 ') dp[0][1]=b[0]; for(inti =1; i < len;i++) {if(A[i] = ='? '){if(a[i-1] !='? ') {dp[i][0] = dp[i-1][a[i-1]-' 0 ']+(0^ (a[i-1]-' 0 ')) *b[i]; dp[i][1] = dp[i-1][a[i-1]-' 0 ']+(1^ (a[i-1]-' 0 ')) *b[i]; }Else{dp[i][0] = max (dp[i-1][0]+(0^0) *b[i],dp[i-1][1]+(0^1) *b[i]); dp[i][1] = max (dp[i-1][0]+(0^1) *b[i],dp[i-1][1]+(1^1) *b[i]); } }Else{if(a[i-1] =='? ') {dp[i][a[i]-' 0 '] = max (dp[i-1][0]+(0^ (a[i]-' 0 ')) *b[i],dp[i-1][1] + (1^ (a[i]-' 0 ')) (*b[i]); }Else{dp[i][a[i]-' 0 '] = dp[i-1][a[i-1]-' 0 '] + ((a[i]-' 0 ') ^ (a[i-1]-' 0 ')) *b[i]; } } }if(a[len-1] !='? '){printf("Case #%d:%lld\n", t++,dp[len-1][a[len-1]-' 0 ']); }Else{printf("Case #%d:%lld\n", T++,max (dp[len-1][0],dp[len-1][1])); } }return 0;}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
HDU 5375 DP