uva 574 Sum It Up
2016-04-09 20:37
197 查看
这一道题 ,我本以为按常规方法做,以为只要比较前一组输出就行,可后来调试发现,输出竟然与上上一组重复,所以我重新写了好思路形成的代码。
代码如下:
代码如下:
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cstdlib> #define TEST using namespace std; int sum1[13],sum2[13],sum3[13],sum4[13]; int n,t,d,flag; void print_num(); void backtracking(int m); bool cmp(int a,int b) { return a > b; } void print_num(int m) { int index = 1,f; flag = 0; for(int i = 0; i <= d; i++) { if(sum4[i] != 0) { f =sum4[i]; while(f--){ if(index) {printf("%d",sum2[i]); index = 0;} else printf("+%d",sum2[i]); } } }sum4[m] = 0; printf("\n"); } void backtracking(int m) { int f; if(t <= 0) { if(t == 0) print_num(m); return ; } else if(m <=d) { f = sum3[m]; f++; do { f --; sum4[m] = f; t -=sum2[m]*f; backtracking(m+1); t +=sum2[m]*f; sum4[m] = 0; }while(f); } return ; } int main() { #ifdef TEST freopen("in.txt","r",stdin); freopen("out.text","w",stdout); #endif // TEST int i; while(~scanf("%d",&t)) { d = 0; scanf("%d",&n); if(n == 0) break; for(i= 0;i < n;i ++) scanf("%d",&sum1[i]); sort(sum1,sum1+n,cmp); memset(sum2,0,sizeof(sum2)); memset(sum3,0,sizeof(sum3));// 注意不能memset 1; memset(sum4,0,sizeof(sum4)); sum2[0] = sum1[0]; sum3[0] ++; for(i = 1; i < n; i ++) { if(sum1[i-1] == sum1[i]) { sum3[d] ++; } else{ sum2[++d] = sum1[i]; sum3[d] ++; } } flag = 1; printf("Sums of %d:\n",t); backtracking(0); if(flag) printf("NONE\n"); } }
相关文章推荐
- 顺序表的实现
- 基本字符串压缩
- asp微信公众号自动回复开发案列之新闻查询机器人
- Eclipse 快捷键大全
- 触发器限制对表修改
- 据廖雪峰python3教程----python学习第十一天
- LeetCode *** 36. Valid Sudoku
- iOS定时器使用小结
- 【hihoCoder】1041. 国庆出游
- 结对编程之黄金分割
- 排名机制
- iOS 音频播放
- 黑板客爬虫闯关第二关
- Java类的加载和类加载器
- 把activity传递给FragmentActivity的数据再传递给FragmentActivity的子Fragment
- 管线分布竣工图(水、强电、弱电、结构)
- 从一个深度图里面导出NARF特征
- JavaScript学习(三)
- CSS换行:word-wrap、word-break和text-wrap差别
- OpenGL学习之路(一)