| ||||||||||
| 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