hdu 1258 果枫

题意:中文题,省。

ac代码:

View Code
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;

int a[15];
int use[15];

int foat;//判断是否要输出“NONE”
int t,n;
int k;//use[]数组中使用


bool cmp(int a,int b)
{
    return a>b;
}

void dfs(int s,int step,int k)
{
    if(t==s)
    {
        foat=1;

        for(int i=0;i<k-1;i++)
            cout<<a[use[i]]<<"+";
        cout<<a[use[k-1]]<<endl;

        return ;

    }

    for(int i=step;i<=n;i++)
    {
        if(a[i]!=a[i-1]||i==step)//保证只输出一个“3+1”,确保唯一性.
        {
            if(s+a[i]<=t)
            {
                use[k]=i;
                dfs(s+a[i],i+1,k+1);
            }
        }
    }
    return ;
}





int main()
{
    while(cin>>t>>n)
    {
        if(t==0&&n==0)break;

        
        memset(a,0,sizeof(a));
        memset(use,0,sizeof(use));
        
        
        
        for(int i=1;i<=n;i++)
            cin>>a[i];

        sort(a+1,a+n+1,cmp);//从大到小排序

        printf("Sums of %d:\n",t);

        foat=0;
        k=0;
        dfs(0,1,0);

        if(foat==0)
            cout<<"NONE"<<endl;

    }
    return 0;
}
/*
4 6 1 2 2 4 3 1
5 5 4 3 2 1 1
5 3 2 1 1
400 12 50 50 50 50 50 50 25 25 25 25 25 25

*/
原文地址:https://www.cnblogs.com/zgfailmr/p/2680754.html