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 |
怪了,按未名上的证明,最后的数组开到200就绝对够的,为什么我开到500还RE?开到5000才过呢?#include <stdio.h> int f[10],t[5000],flag,sum,co[5000]; int dowith() { int i; if (f[1]>=6) return 1; else { if (f[6]>7) if (f[6]%2==0) f[6]=6; else f[6]=7; if (f[5]>12) if (f[5]%2==0) f[5]=12; else f[5]=11; if (f[4]>8) if (f[4]%2==0) f[4]=8; else f[4]=7; if (f[3]>8) if (f[3]%2==0) f[3]=8; else f[3]=7; if (f[2]>4) if (f[4]%2==0) f[4]=4; else f[4]=3; return 0; } } int solve(int w) { int i,j; for (i=0;i<500;i++) { t[i]=0; } t[0]=1; for (i=1;i<=6;i++) if (f[i]) { for (j=1;j<i;j++) if (t[j]) co[j]=0; for (j=i;j<500;j++) { if (t[j]) co[j]=0; else if (t[j-i] && co[j-i]<f[i]) { t[j]=1; co[j]=co[j-i]+1; } } } if (t[w]) return 1; else return 0; } int main() { int i,caset=0; while (scanf ("%d%d%d%d%d%d",&f[1],&f[2],&f[3],&f[4],&f[5],&f[6])!=EOF&&(f[1]||f[2]||f[3]||f[4]||f[5]||f[6])) { caset++; printf ("Collection #%d:\n",caset); sum=0; for (i=1;i<7;i++) sum+=i*f[i]; if (sum%2==1) { printf("Can't be divided.\n\n"); continue; } flag=dowith(); if (flag) printf ("Can be divided.\n\n"); else { sum=0; for (i=1;i<7;i++) sum+=i*f[i]; sum/=2; i=solve(sum); if (i) printf("Can be divided.\n\n"); else printf("Can't be divided.\n\n"); } } return 0; } 程序就在这,大牛们帮忙看下是哪个地方的问题呢?? Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator