2014年1月7日 星期二

[ZJ] d102. 一堆線段


#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int s[105],ans;
char c;
void dfs(int all,int i){
    //printf("%d.\n",i);
    for(;i>=0 && s[i]>all;i--)
        ans+=1<<i;
    for(;i>0;i--)
        dfs(all-s[i],i-1);
}
int main(){
    int n,m,i,j,top,x;
    while(1){
        top=ans=0;
        while(scanf("%d%c",&x,&c)!=EOF){
            s[top++]=x;
            if(c=='\n') break;
        }
        if(top==1 && s[0]==0) break;
        sort(s,s+top);
        for(i=2;i<top;i++)
            for(j=i-1;j>0;j--)
                dfs(s[i]-s[j],j-1);
        printf("%d\n",ans);
    }
}

沒有留言:

張貼留言