题意

给你一个target number,和一个最多六位的数num,让你把数分段,使总和最接近但不大于target number。

如果只有一种方法就输出总和、分段,如果有多种方法,输出rejected,如果零种方法,输出error。

分析

搜索,每次target切去num的最后一位,或者两位...切到不能切,然后问题减小为 target是target-切去的数字的和,num是切去后面数字后的num。

代码

#include<stdio.h>
int target,num,part[],minc,ans[],re=; void init()//初始化
{
for(int i=; i<=; i++) ans[i]=part[i]=;
part[]=;
minc=;
re=;
}
void solve(int num,int tar)//搜索
{
if(num<=tar)//不要再分解
{
if(tar-num<minc)//差值更小则更新答案
{
minc=tar-num;
for(int i=; i<part[]; i++)
ans[i]=part[i];
ans[]=part[];//分段数量
ans[ans[]]=num;
re=;//差值没有重复
}
else if(tar-num==minc) re=;//当前最小差值重复,可能要输出rejected
}
else
{
part[part[]++]=num%;//切开最后一个数字,保存起来
if(num/>&&tar>num%)//切掉后还有数 且 切掉的小于target(新的target要大于0)
solve(num/,tar-num%);
part[]--;//解决完切掉一个的,恢复为切掉前
for(int i=; i<=; i*=)//切掉最后两个数、三个数...五个数
{
part[part[]++]=num%i;
if(num/i>&&tar>num%i)
solve(num/i,tar-num%i);
part[]--;
}
}
}
int main()
{
while(~scanf("%d%d",&target,&num)&&target&&num)
{
init();
solve(num,target);
if(re) printf("rejected\n");
else if(!ans[]) printf("error\n");
else
{
printf("%d ",target-minc);
for(int i=; i<ans[]; i++)
printf("%d ",ans[ans[]-i]);
printf("\n");
}
}
return ;
}

【POJ 1416】Shredding Company的更多相关文章

  1. POJ 1416:Shredding Company

    Shredding Company Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4713   Accepted: 2714 ...

  2. bzoj 2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...

  3. 【链表】BZOJ 2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 382  Solved: 111[Submit][S ...

  4. BZOJ2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 284  Solved: 82[Submit][St ...

  5. BZOJ2293: 【POJ Challenge】吉他英雄

    2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 80  Solved: 59[Submit][Stat ...

  6. BZOJ2287: 【POJ Challenge】消失之物

    2287: [POJ Challenge]消失之物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 254  Solved: 140[Submit][S ...

  7. BZOJ2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 126  Solved: 90[Submit][Sta ...

  8. BZOJ2296: 【POJ Challenge】随机种子

    2296: [POJ Challenge]随机种子 Time Limit: 1 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 114  Solv ...

  9. BZOJ2292: 【POJ Challenge 】永远挑战

    2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 513  Solved: 201[Submit][ ...

随机推荐

  1. Linux命令学习-grep

    1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局 ...

  2. View (二) 自定义属性 自定义属性的格式详解

    自定义属性格式一共有十种: 1. reference:参考某一资源ID. 2. color:颜色值. 3. boolean:布尔值. 4. dimension:尺寸值. 5. float:浮点值. 6 ...

  3. Volley(六 )—— 从源码带看Volley的缓存机制

    磁盘缓存DiskBasedCache 如果你还不知道volley有磁盘缓存的话,请看一下我的另一篇博客请注意,Volley已默认使用磁盘缓存 DiskBasedCache内部结构 它由两部分组成,一部 ...

  4. Saltstack-自动化部署

    Saltstack概述 Salt一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯. salt底层采用动态的连接总线, 使其可以 ...

  5. 在Function对象上扩展method方法

    ;(function() { /** * 在Function对象上扩展method方法 * @param {String} name 扩展的方法名称 * @param {Function} callb ...

  6. Go 命令之 godep

    本文参考:http://www.cnblogs.com/me115/p/5528463.html#h20 http://studygolang.com/articles/4385 关于Godep 发现 ...

  7. [转]一个四叉树Demo学习

    程序代码: http://www.codeproject.com/Articles/30535/A-Simple-QuadTree-Implementation-in-C 四叉树: using Sys ...

  8. 搭建Apache+MySQL+PHP环境

    1.1 搭建Apache+MySQL+PHP环境 1.1.1 关于安装前的准备 配置好yum源(/etc/yum.repos.d/)目录下,不会就去寻求运维支持. httpd-2.2.29.tar.g ...

  9. matlab取消和添加注释以及一些快捷键

    1 matlab中关于注释: 多行注释: 选中要注释的若干语句,工具栏菜单Text->Comment,或者鼠标右击选"Comment",或者快捷键Ctrl+R 取消注释: 选 ...

  10. IE firefox 兼容性整理

    1.尽量用jquery操作. 2.jquery取值时要用准确的方法,attr(), val(), text(), html(). 例如: <span value="a"> ...