Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
一直TLE,请高手赐教!!!//2626 #include <iostream> using namespace std; typedef struct node { int w,b; }p; p play[2000]; int playN; int value[100][100][2000]; bool f[100][100][2000]; //记录是否计算过 int max(int a, int b, int c) { if(a > b) { return a>c ? a : c ; } return b>c ? b : c ; } //dp_play(w,b,num)表示在num个选手中选择w个b棋手,b个黑棋手所能达到的最大value值 int dp_play(int w,int b,int num) { if(w<0 || b<0 || num<1) return 0; if(f[w][b][num]) { return value[w][b][num] ; } if(num==1) { if(w==1) { f[1][0][1]=1; value[1][0][1]=play[1].w; return play[1].w; } if(b==1) { f[0][1][1]=1; value[0][1][1]=play[1].b; return play[1].b; } f[0][0][1]=1; value[0][0][1]=0; return 0; } f[w][b][num]=1; value[w][b][num]=max( dp_play(w-1,b,num-1) + play[num].w, dp_play(w,b-1,num-1) + play[num].b, dp_play(w,b,num-1) ); return value[w][b][num]; } int main(void) { int white,black,i=1; while( scanf("%d %d",&white,&black) ) { play[i].w=white; play[i].b=black; i++; } playN=i-1; printf( "%d", dp_play(15,15,playN) ); system("pause"); return 0 ; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator