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

九度教程第100題

編輯:C++入門知識

C語言源碼: [cpp]  #include<stdio.h>   #include<limits.h>   #define maxsize 4010   #define size 2000   int dp[110][maxsize];   int max2(int a,int b)   {       return a>b?a:b;   }   int max(int a,int b,int c)   {       return max2(a,b)>c?max2(a,b):c;   }   int a[1010];   int main()   {       int t,n,num,i,j,zero;       scanf("%d",&t);           for(num=1;num<=t;num++)           {               zero=0;               scanf("%d",&n);               j=1;               for(i=1;i<=n;i++)               {                   scanf("%d",&a[j++]);                   if(a[j-1]==0)                   {                       zero=1;                       j--;                   }               }               n=j-1;               for(i=0;i<110;i++)                   for(j=0;j<maxsize;j++)                       dp[i][j]=INT_MIN;               dp[0][size]=0;               for(i=1;i<=n;i++)                   for(j=0;j<maxsize;j++)                       if(j-a[i]>=0&&j+a[i]<maxsize)                           dp[i][j]=max(dp[i-1][j-a[i]]+a[i],dp[i-1][j+a[i]]+a[i],dp[i-1][j]);                       else                       {                           if(j-a[i]<0&&j+a[i]<maxsize)                               dp[i][j]=max2(dp[i-1][j+a[i]]+a[i],dp[i-1][j]);                           else                               if(j+a[i]>=maxsize&&j-a[i]>=0)                                   dp[i][j]=max2(dp[i-1][j-a[i]]+a[i],dp[i-1][j]);                               else                                   dp[i][j]=dp[i-1][j];                       }               if(dp[n][size]==0&&zero==0)                   printf("Case %d: -1\n",num);               else                   printf("Case %d: %d\n",num,dp[n][size]/2);           }          }    

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