码迷,mamicode.com
首页 > 其他好文 > 详细

Sum It Up

时间:2019-02-24 20:09:24      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:image   algorithm   技术   color   problem   blank   ide   false   set   

题目:https://vjudge.net/contest/277958#problem/G

技术图片技术图片技术图片

题意:输入一个val和n,然后n个数,然后求n个数相加等于val的值。

代码:

技术图片
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 using namespace std;
 7 int cmp(int a,int b)
 8 {
 9     return a>b;
10 }
11 int sum,n;
12 int tail[10000];
13 bool book[10000];
14 bool flag;
15 int xulie[10000][20];
16 int num;
17 void print()
18 {
19     int xuli[20]={0};
20     int j = 0;
21     int s = 0;
22     for(int i = 1;i<=n;++i)
23     {
24         if(book[i]) {s+=tail[i];xuli[++j] = tail[i];}
25     }
26     if(s==sum)
27     {   bool pan = false;
28         for(int i = 1;i<=num;++i)
29         {
30             for(j = 1;j<=n;++j)
31                 if(xulie[i][j]!=xuli[j]) break;
32             if(j==n+1)  pan = true; //是否是重复过的
33         }
34          if(pan) return; //是重复的,则return
35          else
36         {
37             ++num;
38             for(int i = 1;i<=n;++i) xulie[num][i] = xuli[i];
39             flag = true;
40             int i;
41             for(i=1;i<=n;++i) if(book[i]) {cout<<tail[i]; break;}
42             for(++i;i<=n;++i) if(book[i]) cout<<"+"<<tail[i];
43             cout<<\n;
44         }
45     }
46 }
47 void dfs(int i)
48 {
49     if(i==n+1)
50     {
51         print();
52         return;
53     }
54     // 新学到的dfs方式
55     book[i] = true;
56     dfs(i+1);
57     book[i] = false;
58     dfs(i+1);
59 }
60 int main()
61 {
62     while(~scanf("%d %d",&sum,&n)&&sum+n)
63     {
64         num = 0;
65         memset(book,false,sizeof(book));
66         memset(xulie,0,sizeof(xulie));
67         flag = false;                       //初始化 ↑
68         for(int i = 1;i<=n;++i)
69             scanf("%d",&tail[i]);
70         sort(tail+1,tail+n+1,cmp);         //提前排好序
71         cout<<"Sums of "<<sum<<":\n";
72         dfs(1);
73         if(!flag) cout<<"NONE\n";
74     }
75 }
View Code

 

Sum It Up

标签:image   algorithm   技术   color   problem   blank   ide   false   set   

原文地址:https://www.cnblogs.com/LJHAHA/p/10427608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!