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 |
又是水题#include <iostream> #include <cstring> #include <stdio.h> #include <stdlib.h> #include <cmath> #include <algorithm> using namespace std; int gs, T, N; int sz[15], sl[15]; int jc[15]; int bfh[15]; int ct; void dfs(int bs, int sy){ if(sy > bfh[bs]) return; if(sy == bfh[bs]){ ct++; bool printed = 0; for(int i = 0; i < bs; i++){ for(int j = 0; j < jc[i]; j++){ if(printed) printf("+"); printf("%d",sz[i]); printed=1; } } for(int i = bs; i < gs; i++){ for(int j = 0; j < sl[i]; j++){ if(printed) printf("+"); printf("%d",sz[i]); printed=1; } } printf("\n"); return; } if(sy == 0){ ct++; bool printed = 0; for(int i = 0; i < bs; i++){ for(int j = 0; j < jc[i]; j++){ if(printed) printf("+"); printf("%d",sz[i]); printed = 1; } } printf("\n"); return; } if(bs >= gs) return; int zd = sl[bs]; if(sy/sz[bs] < zd) zd = sy/sz[bs]; for(int i = zd; i >= 0; i--){ jc[bs] = i; dfs(bs+1, sy-i*sz[bs]); } } int main() { while(1){ scanf("%d%d",&T,&N); if(!T && !N) break; int s = -1, cnt = 0; gs = 0; for(int i = 0; i < N; i++){ int temp; scanf("%d",&temp); if(temp == s) cnt++; else{ if(s != -1){ sz[gs] = s; sl[gs] = cnt; gs++; } cnt = 1; s = temp; } } sz[gs] = s; sl[gs] = cnt; gs++; ct = 0; printf("Sums of %d:\n", T); bfh[gs] = 0; for(int i = gs-1; i >= 0; i--){ bfh[i] = bfh[i+1] + sz[i]*sl[i]; } dfs(0, T); if(!ct) printf("NONE\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