栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1711 Sum It Up

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1711 Sum It Up

#include <stdio.h>#include <stdlib.h>#include <iostream>#include <memory.h>using namespace std;int map[13];int visit[13];int sum;int put[1000][13],str[13],len[1000];int n,t,cou,num;int flag;void DFS(int d){if( sum == t )  {len[num] = cou;memcpy( put[num], str, cou*sizeof(int) );num++;flag = 1;}for(int i=d; i<=n; i++){if( !visit[i] && sum + map[i] <= t ){visit[i] = 1;str[cou] = map[i];cou ++;sum += map[i];DFS(i+1);visit[i] = 0;sum -= map[i];cou--;}}}int cmp( int i,int k)  {if(len[i] != len[k])return 0;for(int j=0; j<len[i]; j++)if( put[i][j] != put[k][j] )return 0;return 1;}void output(){int jilu[1000];memset(jilu,0,sizeof(jilu));for(int i=0; i<num; i++)   {for(int k=i+1; k<num; k++)    if( cmp(i,k) && !jilu[k] )    {jilu[k] = 1;}}for(int i=0; i<num; i++)if( jilu[i] == 0 )        { cout << put[i][0];for(int k=1; k<len[i]; k++)   cout << '+'<< put[i][k]; cout << endl;}}int main(void){while( cin >> t >> n && t ){for(int i=1; i<=n; i++)cin >> map[i];memset( visit,0,sizeof(visit) );memset( put,0,sizeof(put) );sum = 0; cou = 0; flag = 0; num = 0;cout << "Sums of " << t << ":" << endl ;DFS(1);output();if( flag == 0 )    cout << "NONE" << endl;}return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号