标签:dp
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<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #include<stack> #include<vector> #include<set> #include<map> #define L(x) (x<<1) #define R(x) (x<<1|1) #define MID(x,y) ((x+y)>>1) #define bug printf("hihi\n") #define eps 1e-8 typedef long long ll; using namespace std; #define mod 1000000007 #define INF 0x3f3f3f3f #define N 200005 int va[N]; char c[N]; int len; int ans; int dp[N][2]; int ca=0; void DP() { int i,j; if(c[1]=='1') { dp[1][1]=va[1]; dp[1][0]=-INF; } else if(c[1]=='0') { dp[1][1]=-INF; dp[1][0]=0; } else { dp[1][0]=0; dp[1][1]=va[1]; } for(i=2;i<=len;i++) if(c[i]=='1') { dp[i][1]=max(dp[i-1][1],dp[i-1][0]+va[i]); dp[i][0]=-INF; } else if(c[i]=='0') { dp[i][1]=-INF; dp[i][0]=max(dp[i-1][0],dp[i-1][1]+va[i]); } else { dp[i][1]=max(dp[i-1][1],dp[i-1][0]+va[i]); dp[i][0]=max(dp[i-1][1]+va[i],dp[i-1][0]); } printf("Case #%d: %d\n",++ca,max(dp[len][0],dp[len][1])); } int main() { int i,j,t,ca=0; scanf("%d",&t); while(t--) { scanf("%s",c+1); len=strlen(c+1); for(i=1;i<=len;i++) scanf("%d",&va[i]); DP(); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:dp
原文地址:http://blog.csdn.net/u014737310/article/details/47426039