程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 10891 - Game of Sum

10891 - Game of Sum

編輯:C++入門知識

[cpp]
描述:博弈題目,雙方可以數組任何一邊取連續的的幾個數組元素的值的和,但不能同時從兩邊去,可以從一邊一次取到頭 
#include <cstdio>  
#include <cstring>  
#include <cstdlib>  
int n,sum; 
int arr[110]; 
int v[110][110]; 
int min(int x,int y) 

    return x>y?y:x; 

int dp(int x,int y) 

    if(v[x][y]>sum) return v[x][y]; 
    int c=0; 
    for(int i=x; i<y; i++) c=min(c,dp(x,i)); 
    for(int i=x+1; i<=y; i++) c=min(c,dp(i,y)); 
    v[x][y]=arr[y]-arr[x-1]-c; 
    return v[x][y]; 

int main() 

    //freopen("a.txt","r",stdin);  
    while(scanf("%d",&n)!=EOF) 
    { 
        if(!n) break; 
        arr[0]=0; 
        for(int i=1; i<=n; i++) 
        { 
            scanf("%d",&arr[i]); 
            arr[i]+=arr[i-1]; 
        } 
        memset(v,-127,sizeof(v)); 
        sum=v[0][0]; 
        printf("%d\n",2*dp(1,n)-arr[n]); 
    } 
    return 0; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved