POJ1416Shredding Company
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的更多相关文章
- Elasticsearch索引(company)_Centos下CURL增删改
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch索引说明 a. 通过上面几篇博客已经将Elastics ...
- 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 ...
- poj1416 Shredding Company
Shredding Company Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5379 Accepted: 3023 ...
- CodeForces 125E MST Company
E. MST Company time limit per test 8 seconds memory limit per test 256 megabytes input standard inpu ...
- CF 321B Kefa and Company(贪心)
题目链接: 传送门 Kefa and Company time limit per test:2 second memory limit per test:256 megabytes Desc ...
- 搜索+剪枝 POJ 1416 Shredding Company
POJ 1416 Shredding Company Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5231 Accep ...
- 二分+动态规划 POJ 1973 Software Company
Software Company Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1112 Accepted: 482 D ...
- 【Moqui业务逻辑翻译系列】Story of Online Retail Company 在线零售公司的故事
h1. Story of Online Retail Company 在线零售公司的故事 Someone decides to sell a product. [Product Marketer Ma ...
- Codeforces 556D Restructuring Company
传送门 D. Restructuring Company time limit per test 2 seconds memory limit per test 256 megabytes input ...
随机推荐
- OSX 上初步尝试 asp.net 5
去年微软最令开源狗界振奋的消息就是 ASP.NET 的开放与开源这一消息了. 根据微软的介绍,与我之前的一些总结,可以看到 ASP.NET 以及 .NET 平台会有下面几个变化: 代码使用 Apach ...
- zedboard之ubuntu环境变量设置
在Ubuntu中有如下几个文件可以设置环境变量 1./etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. ...
- JQuery 表格 隔行换色 和鼠标滑过的样式
$(document).ready(function () { $(".Pub_TB tbody tr:even td").css("background-color&q ...
- [大牛翻译系列]Hadoop(4)MapReduce 连接:选择最佳连接策略
4.1.4 为你的数据选择最佳连接策略 已介绍的每个连接策略都有不同的优点和缺点.那么,怎么来判断哪个最适合待处理的数据? 图4.11给出了一个决策树.这个决策树是于论文<A Compariso ...
- 为msysgit增加vim语法高亮文件
在win7下装了msysgit,今天我遇到一个不爽的问题,打开git bash,用vim打开一个xml文件 结果都是黑屏的,没语法高亮,这个必须不能忍啊,我找到msysgit的安装目录,发现Vim73 ...
- iis 下的 selfssl
当然,如果你想省掉所有这些麻烦也行,最简单的在IIS启动SSL的方法只要3步: 1. 下载 IIS 6.0 Resource Kit Tools: http://www.microsoft.com/d ...
- linux前景到底怎么样啊?
我就不长篇大论,举四个例子你看看. 1.目下最热最潮最流行的云计算技术的背后是虚拟化和网格技术,而虚拟化和网格技术基本是Linux的天下,目前虚拟化的三大家:Vmware,Xen,Hyper-V中,市 ...
- DataSnap中连接池的应用
当开发人员开始创建Delphi的DataSnap应用时很常见的数据库连接定义方式是每个数据模块建立一个连接.这样做将产生大量的数据库连接,并产生很多问题.从Delphi XE开始,EMB提供了Sess ...
- java之classpath到底是什么
如果你输入一个命令,比如java那么系统是如何找到这个命令的呢?按照顺序,系统先在当前目录搜索是否有java.exe, java.bat 等. 如果没有,就得到系统的PATH(不区分大小写)里面查找. ...
- 与MySQL交互(felixge/node-mysql)
目录 简介和安装 测试MySQL 认识一下Connection Options MYSQL CURD 插入 更新 查询 删除 Nodejs 调用带out参数的存储过程,并得到out参数返回值 结束数据 ...