这题郁闷了,排序过不了,后来仔细想想不用排序, 于是果断删了,没想到删了再杭电能过,在北大不能过,真郁闷了

这题是以简单DFS,在搜到时把结果存起来,然后再暴力搜索,看是否已存在这样的sum,最后一次性输出来就o了.先贴一神代码把.... 这个hdu poj 都能过( 这个算法非常好.以后对于组合问题都能这么干了 )

#include<stdio.h>
int t,n,num[20],flag,res[20];
void DFS( int p,int s,int nu )
{if( s == t ){flag = 1;for( int i = 0; i < nu; ++i )printf( i == 0 ? "%d" : "+%d",res[i] );puts( "" );return ;}for( int i = p; i < n ; ++i ){if( i > p && num[i] == num[i-1] )//这个就保证如果有相同的数,相同的组合,每个只用一次,而且是第一次continue;if( num[i] + s <= t )res[nu] = num[i],DFS( i+1,s + num[i],nu + 1 );}}
int main( )
{while( scanf( "%d%d",&t,&n ),t ){flag = 0;for( int i = 0; i < n; ++i )scanf( "%d",&num[i] );printf( "Sums of %d:\n",t );DFS( 0,0,0 );if( !flag )puts( "NONE" );}return 0;
}

下面这个是我的搓代码( 杭电能过,北大挂了 )

#include<stdio.h>
#include<string.h>
int des[20],t,n,num[20],c,nu[20];
char ch[20][20];
void DFS( int x,int min )
{if( nu[x] == t ){int i ;for(  i = 0; i < x; ++i )ch[c][i] = nu[i+1] - nu[i];ch[c][i] = 0;int f = 1;for( int i = 0; i < c; ++i )if( strcmp( ch[i],ch[c] ) == 0 ){f = 0;break;}if( f )++c;return ;}else{for( int i = min; i < n; ++i ){if( !des[i] )if( nu[x] + num[i] <= t ){des[i] = 1;nu[x+1] = num[i] + nu[x];DFS( x + 1,i );des[i] = 0;}}}}
int cmp( char str1[],char str2[] )
{int len1 = strlen( str1 ),len2 = strlen( str2 );if( len1 != len2 )return len1 - len2;return strcmp( str2,str1 );
}
int main( )
{while( scanf( "%d%d",&t,&n ) , n ){c = 0;for( int i = 0; i < n; ++i )scanf( "%d",&num[i] ),des[i] = 0;nu[0] = 0;DFS( 0,0 );printf( "Sums of %d:\n",t );if( !c || !t ){puts( "NONE" );continue;}for( int i = 0; i < c; ++i ){for( int j = 0; j < strlen( ch[i] );++j )printf( j == 0 ?"%d": "+%d",ch[i][j] );puts( "" );}}return 0;
}

转载于:https://www.cnblogs.com/Lvsi/archive/2011/05/04/2037049.html

HDU 1258 Sum It Up相关推荐

  1. hdu 1258 Sum It Up(回溯算法)

    题意:从给定的n个正整数中选出m个数(m <= n)使得这m个数的和为给定的total 解法:回溯 /* Author: ACb0y Date: 2010-11-11 ProblemId: hd ...

  2. hdu 1258...... Sum It Up 搜索

    这个题又是传说中一个代码6题的那种题. 在vjudge上可以看到6道一毛一样的题. 题面 给两个数t,n和n(不超过12)个正整数,求出所有不同子集,使得它们加起来等于t,输出这些子集. 没有答案pu ...

  3. HDU.1001 Sum Problem

    原题 HDU.1001 Sum Problem 分类 杂题 题意 计算从1到正整数n的累加和. 输入/输出 要求与格式 输入内容 每行输入一个正整数 输出结果 结果为累加和 输出格式 每个输出结果独占 ...

  4. hdoj - 1258 Sum It Up hdoj - 1016 Prime Ring Problem (简单dfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1258 关键点就是一次递归里面一样的数字只能选一次. 1 #include <cstdio> 2 #i ...

  5. hdu 4676 Sum Of Gcd 莫队+phi反演

    Sum Of Gcd 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4676 Description Given you a sequence of ...

  6. hdu 4407 Sum

    http://acm.hdu.edu.cn/showproblem.php?pid=4407 题意:给定初始n个数1..n,两个操作,①1 x y p  询问第x个数到第y个数中与p互质的数的和; ② ...

  7. hdu 3022 Sum of Digits

    http://acm.hdu.edu.cn/showproblem.php?pid=3022 题意: 最多不超过10000组数据,每组数据给定两个数n,m,求一个最小的数,使得该数每一位之和等于n,每 ...

  8. HDU 5776 sum (BestCoder Round #85 A) 简单前缀判断+水题

    分析:就是判断简单的前缀有没有相同,注意下自身是m的倍数,以及vis[0]=true; #include <cstdio> #include <cstdlib> #includ ...

  9. hdu max sum

    这题跟求最大连续数列一样的,稍微不同的是只要把值改为标号就可以了. #include<stdio.h> #include<string.h> #include<stdli ...

最新文章

  1. 时频特性分析(Matlab)
  2. DAG情况下如何移动数据库路径
  3. 全球及中国原料药产业投资动态及未来运行前景分析报告2021-2027年
  4. a few ideas for cambridge career
  5. 使计算机工作必不可缺的软件,探讨测绘工程中计算机制图的运用问题(原稿)
  6. Java学习笔记—TCP通信
  7. 详解OpenCV中的cvCreateMat()函数
  8. html pre标签增加行号,vue使用highlight.js 添加行号
  9. @Scheduled定时任务
  10. Android开发自定义View之滑动按钮与自定义属性
  11. ssl介绍以及双向认证和单向认证原理
  12. 阿里云前端周刊 - 第 25 期
  13. java中判断字符串是否为纯数字
  14. 2. 创建多网站和商店(Creating Multiple Websites and Stores)
  15. BZOJ 1507 [NOI2003]Editor
  16. 产品经理面试题目转载
  17. 微信小程序实战五:人脸识别登录的实现
  18. 【无机纳米材料科研制图——Photoshop 0403】PS使用索套工具和魔棒工具框出选区
  19. tomcat中JSP跳转Servlet时卡白页的原因
  20. selenium爬取拉钩网数据

热门文章

  1. VS2017调用MySQL 8.0(附上C++程序)
  2. 用OneR算法对Iris植物数据进行分类
  3. html 连续发送数据库,不要在循环中对数据库进行操作.htm
  4. 滚动条全局样式修改与局部修改
  5. 内核知识第九讲,32位下的分页管理,36位下的分页管理.以及64位下的分页管理
  6. 多线程并发快速处理数据
  7. Python学习 第2天 IDE开发工具
  8. SQL中JOIN 的用法
  9. hdu 3333 树状数组+离线处理
  10. POJ 3034 Whac-a-Mole(DP)