博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1564 && zoj 1711 Sum It Up (dfs)
阅读量:7045 次
发布时间:2019-06-28

本文共 930 字,大约阅读时间需要 3 分钟。

 

 

  简单深搜,主要是这一句 if(!vis[i]&&data[i]<=sum&&(data[i]!=data[i-1]||i==pos))。

确保两个连续的相同的数只有一次机会进入ans[],避免了结果的重复。

code:

#include<cstdio>
#include<cstring>
int data[
15] ;
int ans[
15] ;
bool vis[
15] ;
bool flag ;
int n ;
void dfs(
int sum, 
int count, 
int pos){
    
if(!sum){
        flag = 
true ;
        printf(
"
%d
", ans[
0]) ;
        
for(
int i=
1; i<count; i++)
            printf(
"
+%d
", ans[i]) ;
        printf(
"
\n
") ;
        
return ;
    }
    
for(
int i=pos; i<n; i++){
        
if(!vis[i]&&data[i]<=sum&&(data[i]!=data[i-
1]||i==pos)){
            vis[i] = 
true ;
            ans[count] = data[i] ;
            dfs(sum-data[i], count+
1, i+
1) ;
            vis[i] = 
false ;
        }
    }
}
int main(){
    
int t, i, j ;
    
while(~scanf(
"
%d%d
", &t, &n)&&t+n){
        memset(vis, 
false
sizeof(vis)) ;
        
for(i=
0; i<n; i++){
            scanf(
"
%d
", &data[i]) ;
            
if(data[i]>t)  vis[i] = 
true ;
        }
        printf(
"
Sums of %d:\n
", t) ;
        flag = 
false ;
        dfs(t, 
0
0) ;
        
if(!flag)  printf(
"
NONE\n
") ;
    }
    
return 
0 ;} 

转载于:https://www.cnblogs.com/xiaolongchase/archive/2012/03/11/2390644.html

你可能感兴趣的文章
JVM——类加载机制(一)
查看>>
超清晰的 DNS 原理入门指南 (资源)
查看>>
大神笔记
查看>>
spring cloud构建java b2b2c 电子商务云商平台
查看>>
阿里顶级Java架构师,教你这样手写Spring!
查看>>
android课程表控件、悬浮窗、Todo应用、MVP框架、Kotlin完整项目源码
查看>>
CLOB字段在java中操作
查看>>
磁盘清理
查看>>
javascript 判断数据类型 判空
查看>>
matplotlib 中文字体问题
查看>>
protobuf v3测试
查看>>
(1)知识准备【利用objective-c的runtime特性,结合FMDB实现一个轻量级的ORM】
查看>>
Angular js开发的各种坑(持续更新中。。。)
查看>>
Google Apps - Gmail API的通知功能
查看>>
调试java8 函数式
查看>>
Intellij使用心得(二) -- 关于启动Web服务器的几个事
查看>>
linux源代码安装软件
查看>>
2013年4月IT技术行业网站综合影响力排名
查看>>
Magento session机制的分析与应用
查看>>
linux 服务器长ping 加时间戳;转
查看>>