poj1416

#include<iostream>
using namespace std;

int target,datanum;
int road[100],temproad[100];
int N,flag,maxsum;
int data[100],datatemp[100];
int tail;

void cun(int n)
{
    tail=0;

    while(n/10)
    {
        int m=n%10;
        n=n/10;
        datatemp[tail++]=m;
    }
    datatemp[tail++]=n%10;
    for(int i=0;i<tail;i++)
        data[i]=datatemp[tail-i-1];
    return;
}

void dfs(int n, int step, int sum, int tobe)
{
    if(sum>target)
        return;

    if(n==N-1)
    {
        sum=sum+tobe*10+data[N-1];
        temproad[step]=tobe*10+data[N-1];
        if(sum>target)
            return;
        if(sum==maxsum)
            flag=1;
        else if(sum>maxsum)
        {
            for(int i=0;i<100;i++)
                road[i]=-1;
            flag=0;
            maxsum=sum;
            for(int i=0;i<=step;i++)
                road[i]=temproad[i];
        }
        return;
    }

    temproad[step]=tobe*10+data[n];
    dfs(n+1,step+1,sum+tobe*10+data[n],0);//切
    temproad[step]=-1;

    dfs(n+1,step,sum,tobe*10+data[n]);
}

int main()
{
    //freopen("input.txt","r",stdin);
    while(1)
    {
        cin>>target>>datanum;
        //cout<<target<<alldata<<endl;
        if(target==0&&datanum==0)
            break;
        if(target==datanum)
        {
            cout<<target<<‘ ‘<<target<<endl;
            continue;
        }
        for(int i=0;i<100;i++)
            data[i]=-1;
        cun(datanum);
        N=tail;

        maxsum=-1;
        flag=0;
        for(int i=0;i<100;i++)
        {
            road[i]=-1;
            temproad[i]=-1;
        }
        dfs(0,0,0,0);
        if(maxsum==-1)
            cout<<"error"<<endl;
        else if(flag==1)
            cout<<"rejected"<<endl;
        else
        {
            cout<<maxsum<<‘ ‘;
            for(int i=0;i<100;i++)
            {
                if(road[i]!=-1)
                    cout<<road[i]<<‘ ‘;
            }
             cout<<endl;
        }
    }
    return 0;
}
时间: 2024-10-13 20:42:53

poj1416的相关文章

POJ1416——Shredding Company(DFS)

Shredding Company DescriptionYou have just been put in charge of developing a new shredder for the Shredding Company Although a "normal" shredder would just shred sheets of paper into little pieces so that the contents would become unreadable, t

poj1416——dfs递归枚举+记录路径

POJ 1416  dfs递归枚举+记录路径 Shredding Company Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4456   Accepted: 2555 Description You have just been put in charge of developing a new shredder for the Shredding Company Although a "normal" s

[POJ1416]Shredding Company(dfs)

题目链接:http://poj.org/problem?id=1416 题意:一段数分成好几段相加,求最大的且不大于目标值的组合. DFS,用vector<int>tmp来记录中间结果,回溯的时候pop掉.判重用了个map,其实用一个flag打标记也可. 1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include

[DFS]poj1416

题意: 如果输入的串分割后的和最小都比Target大,那就输出error. 如果有多种结果一样,那么就输出rejected. 否则,输出最大的和 和分别是哪些子串. 这个题都是整数,所以比较简单. 直接搜索所有的情况就好了,还有一点是打印路径,一般可以用path[]或者pre[]的数组表示,但是这里数据有点大我就用的map水过了.. #include <cstdio> #include <cstring> #include <cmath> #include <io

acm常见算法及例题

转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法

ACM算法总结及刷题参考

参考:http://bbs.byr.cn/#!article/ACM_ICPC/11777 OJ上的一些水题(可用来练手和增加自信)(poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一.基本算法: (1)枚举. (poj1753,poj2965)    (2)贪心(poj1328,poj2109,poj2586)    (3)递归和分治法.     (4)递推.     (5)构造法.(po

POJ题目推荐(转载)

POJ推荐50题1.标记“难”和“稍难”的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉.2.标记为A and B的题目是比较相似的题目,建议大家两个一起做,可以对比总结,且二者算作一个题目.3.列表中大约有70个题目.大家选做其中的50道,且每类题目有最低数量限制.4.这里不少题目在BUPT ACM FTP上面都有代码,请大家合理利用资源.5.50个题目要求每个题目都要写总结,养成良好的习惯.6.这个列表的目的在于让大家对各个方面的算法有个了解,也许要求有些苛刻,教条,请大家谅

POJ题目分类

初期: 一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,he

嗷嗷嗷,kuangbin大大博客上拉的题

正在学(learning),未学(waiting),已学(cut  vovering) 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.