• HDOJ --- 1258


     1 #include<map>
     2 #include<string>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<iostream>
     6 #include<algorithm>
     7 #define MAXN 20
     8 using namespace std; 
     9 int a[MAXN], temp[MAXN], vis[MAXN]; 
    10 int T, N, flag, sum; 
    11 string ss; 
    12 char str[MAXN]; 
    13 map<string, int>mp; 
    14 bool cmp(int a, int b){return a > b;}
    15 void dfs(int dep, int idx){
    16     if(sum > T) return; 
    17     if(idx == N && sum != T) return; 
    18     if(sum == T){
    19         flag ++; 
    20         if(flag == 1) printf("Sums of %d:
    ", T); 
    21         for(int i = 0; i < dep; i ++) str[i] = temp[i]; 
    22         ss.clear(); 
    23         ss = str; 
    24         mp[ss]++; 
    25         if(mp[ss] == 1){
    26             for(int i = 0; i < dep-1; i ++) printf("%d+", temp[i]); 
    27             printf("%d
    ", temp[dep-1]); 
    28         }
    29         return; 
    30     }
    31     for(int i = idx; i < N; i ++){
    32         if(!vis[i]){
    33             vis[i] = 1; 
    34             temp[dep] = a[i]; 
    35             sum += a[i]; 
    36             dfs(dep+1, i+1);
    37             sum -= a[i]; 
    38             vis[i] = 0; 
    39         }
    40     }
    41 }
    42 int main(){
    43     int tt;
    44     /* freopen("in.c", "r", stdin); */ 
    45     while(~scanf("%d%d", &T, &N) && N+T){
    46         tt = 0; 
    47         memset(vis, 0, sizeof(vis)); 
    48         for(int i = 0; i < N; i ++) scanf("%d", a+i),tt += a[i]; 
    49         if(tt < T){
    50             printf("Sums of %d:
    NONE
    ", T); 
    51             continue; 
    52         }
    53         sort(a, a+N, cmp); 
    54         mp.clear(); 
    55         sum = flag = 0; 
    56         dfs(0, 0); 
    57         if(!flag) printf("Sums of %d:
    NONE
    ", T); 
    58     }
    59     return 0; 
    60 }
  • 相关阅读:
    Git 安装使用及基础命令
    Ubuntu Anaconda3 环境下安装caffe
    Anaconda 安装及Python 多版本间切换
    基于 ZooKeeper 的分布式锁实现
    java 判断点是否在一条线段上
    python 安装opencv及问题解决
    python Opencv图像基础操作
    sctf pwn200
    BCTF warmup 50
    linux shadow破解
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3673283.html
Copyright © 2020-2023  润新知