http://poj.org/problem?id=1416

题意 : 要为碎纸机公司开发一种新的碎纸机,这种碎纸机要具有3个特性 :一是粉碎机以一个目标数 t 作为输入,并且粉碎的纸上写有一个数字n,二是碎纸机将纸粉碎成碎片的时候每张碎片上都要有这个数字的一位或者数位,三是每张碎片上数字的总和尽可能地接近目标数 t ,但不可以超过 t ,可以等于 t 。如果目标数与纸张上的数字相同,则不要粉碎,如果任何组合的总和不可能小于或者等于目标数 t ,就输出error,例如,如果目标数 t = 1,但是纸上的数是123的话,就算最小的组合也是6,所以不满足要求。还有若是有多个符合要求的,也就是说有多个总和接近目标数 t 但是没有超过目标数 t的,就输出rejected。最后输出的话,除了error还有rejected,另一种输出就是先输出符合条件的组合加起来的总和,再输出这个组合的每一部分,空格隔开

思路 : 所有碎纸片上的最佳数字和为max,所以要先判断和为max的拆分方案数是1还是大于1还是等于0,,而求这个最佳数字和max,我们从右往左按位拆分,若当前拆分出 i 位数,则n%(10^i),为当前碎纸片上的数字,剩余数字n/(10^ i )待拆分,而拆分有两种情况 :

不断开 : 当前碎纸片上的数字继续向左扩展

断开 : 拆分出当前碎纸片上的数字,所以,可以采用回溯法分头递归这两种情况

#include<cstdio>
#include<cstring>
#include<iostream>
const int maxn = ;
int m,n;
int ans[maxn],t[maxn];
int maxx,r;
int ansk;
void dfs(int n,int sum,int now,int k,int p)
{//n为待拆分数字,sum为已拆分出的输的和,now为当前待拆分出的一个数字,准备填入第k张碎纸片,
//p为下一个十进制位的权
if(n==)
{
t[k]=now;
if(sum+now>m) return;//若拆分出的数和大于目标数则退出,
if(sum+now==maxx) r++;//若拆分出的数和相同于maxx,那就使组合个数加1
else if(sum+now>maxx)//若拆分出的数和更佳,就更新为maxx
{
maxx=sum+now;
r=;//数和为maxx的组合为1
ansk=k;//已填数的碎纸片数和各张碎纸片数的填数记入最佳方案
for(int i=; i<=k; i++) ans[i]=t[i];
}
return ;//回溯
}
int mm=n%;//取待拆分数的个位数
dfs(n/,sum,now+p*mm,k,p*);//递归不断开的情况
t[k]=now;
dfs(n/,sum+now,mm,k+,);//断开的情况
}
int main()
{
while(scanf("%d%d",&m,&n)&&m&&n)
{
maxx=,r=;
dfs(n/,,n%,,);
if(maxx==)
{
printf("error\n");
continue;
}
if(r>)
{
printf("rejected\n");
continue;
}
printf("%d",maxx);
for(int i=ansk; i>=; i--)
printf(" %d",ans[i]);
printf("\n");
}
return ;
}

POJ1416Shredding Company的更多相关文章

  1. Elasticsearch索引(company)_Centos下CURL增删改

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch索引说明 a. 通过上面几篇博客已经将Elastics ...

  2. Microsoft Dynamics AX 2012: How to get Company,Customer and Vendor address in AX 2012

    Scenario:  “How to get Addresses of “Customer, Vendor and Company” 1)      First we need to identify ...

  3. poj1416 Shredding Company

    Shredding Company Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5379   Accepted: 3023 ...

  4. CodeForces 125E MST Company

    E. MST Company time limit per test 8 seconds memory limit per test 256 megabytes input standard inpu ...

  5. CF 321B Kefa and Company(贪心)

    题目链接: 传送门 Kefa and Company time limit per test:2 second     memory limit per test:256 megabytes Desc ...

  6. 搜索+剪枝 POJ 1416 Shredding Company

    POJ 1416 Shredding Company Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5231   Accep ...

  7. 二分+动态规划 POJ 1973 Software Company

    Software Company Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1112   Accepted: 482 D ...

  8. 【Moqui业务逻辑翻译系列】Story of Online Retail Company 在线零售公司的故事

    h1. Story of Online Retail Company 在线零售公司的故事 Someone decides to sell a product. [Product Marketer Ma ...

  9. Codeforces 556D Restructuring Company

    传送门 D. Restructuring Company time limit per test 2 seconds memory limit per test 256 megabytes input ...

随机推荐

  1. 《使用shell位置变量进行目录文件的备份小脚本》

    今天才发现原来位置变量也可以玩的这么爽!! 这是使用位置变量进行文件目录备份:#!/bin/bashDATE=`date +%F`  //日期以年月日输出tar czf $1.$DATE.tar.gz ...

  2. VIM小技巧之文件名补全

    恩,这两天在看<简明Python教程>,那里面作者建议写代码的时候前面的注释写上文件名,写上调用的解释器,比如这样: 恩,然后我当然不可能每回新建一个文件,就要在开头写上一大串东西啊,vi ...

  3. Mysql数据库常用的命令 数据备份 恢复 远程

    远程数据库 格式: mysql -h主机地址 -u用户名 -p用户密码数据库 mysql -h 42.51.150.68 -u yang -p discuz mysql设置密码 mysql>us ...

  4. 更改windows服务的配置文件app.config

    /// <summary> /// 获取每次处理记录数 /// </summary> /// <returns></returns> private s ...

  5. WordPress 主题开发 - (五)WordPress 主题模板及目录结构 待翻译

    While the most minimal of WordPress Themes really only need an index.php template and a style.css fi ...

  6. 关于PHP Websocket 错误: "stream_select(): You MUST recompile PHP with a larger value of FD_SETSIZE" 的解决方案

    最近在使用Ratchet (一个PHP websocket框架)改造一个PHP网站的时候,出现了错误: "It is set to 1024, but you have descriptor ...

  7. ThoughtWorks FizzBuzzWhizz 代码实现

    当时拉钩网ThoughtWorks出了一道面试题(https://www.jinshuju.net/f/EGQL3D),本人用PHP实现了一下,当时忘记了把代码分享出来,今天特来补上. FizzBuz ...

  8. MediaRecorder类介绍

    audiocallbackvideojavadescriptorencoding 目录(?)[+] 找到个MediaRecorder类介绍和大家分享一下. Mediarecorder类在官网的介绍和在 ...

  9. 精美舒适的对话消息提示框--第三方开源--SweetAlertDialog

    SweetAlertDialog(sweet-alert-dialog)是一个套制作精美.动画效果出色生动的Android对话.消息提示框 SweetAlertDialog(sweet-alert-d ...

  10. css透明(支持各浏览器)

    opacity: 0.4;filter: progid:DXImageTransform.Microsoft.Alpha(opacity=40); -ms-filter: "progid:D ...