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 |
Re:所有数据都能过, AC, 0ms!!!In Reply To:所有数据都能过, AC, 0ms!!! Posted by:CodesW at 2016-04-16 16:49:52 > #include <stdio.h> > > int sticks[64] = {0} ; > int stickCnt = 0 ; > char used[64] = {0} ; > int len = 0 ; > > void sort(int *sticks, int stickCnt) > { > int i = 0, j = 0 ; > int max = 0 ; > int tmp = 0 ; > > for(i = 0; i < stickCnt - 1; i++) > { > max = i ; > for(j = i+1; j < stickCnt; j++) > if(sticks[j] > sticks[max]) > max = j ; > > if(i != max) > { > tmp = sticks[i] ; > sticks[i] = sticks[max] ; > sticks[max] = tmp ; > } > } > } > > int dfs(int usedCnt, int curLen, int pos) > { > int i = 0 ; > > if(curLen == len) > { > if(usedCnt == stickCnt) > return 1 ; > > pos = 0 ; > curLen = 0 ; > } > > for(i = pos; i < stickCnt; i++) > { > if(used[i]) > continue ; > > if(curLen + sticks[i] > len) > continue ; > > used[i] = 1 ; > if(dfs(usedCnt + 1, curLen + sticks[i], i+1)) > return 1 ; > used[i] = 0 ; > > if(0 == curLen) > return 0 ; > > while((i < stickCnt) && (sticks[i+1] == sticks[i])) > i++ ; > } > > return 0 ; > } > > int main(int argc, char *argv[]) > { > int i = 0 ; > int sum = 0 ; > > while(scanf("%d", &stickCnt) && stickCnt) > { > sum = 0 ; > for(i = 0; i < stickCnt; i++) > { > scanf("%d", &sticks[i]) ; > sum += sticks[i] ; > } > > sort(sticks, stickCnt) ; > > for(len = sticks[0]; len <= sum; len++) > { > if(sum % len == 0) > { > for(i = 0; i < stickCnt; i++) > used[i] = 0 ; > > if(dfs(0, 0, 0)) > break ; > } > } > > printf("%d\r\n", len) ; > } > > return 0 ; > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator