题意

给你一个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. HDU 2065 “红色病毒”问题 --指数型母函数

    这种有限制的类棋盘着色问题一般可以用指数型母函数来解决,设Hn表示这样的着色数,首先H0=1,则Hn等于四个字母的(A,B,C,D)的多重集合的n排列数,其中每个字母的重数是无穷,且要求A,C出现的次 ...

  2. android应用中去掉标题栏的方法

    现在我坚定的认为写技术博客对自己有很大的帮助,写博客给自己一个学而思的机会. 在Android中去掉标题栏有三种方法,它们也有各自的特点. 1.在代码里实现 this.requestWindowFea ...

  3. Maya FEM节点框架完成

    这几天把物理模拟框架移植到maya之中了. maya编程有一点比较关键,就是要让自己的程序逻辑适应maya的节点求值机制.在物理模拟中,往往需要进行时间积分,对此我的解决办法是,写一个节点rigSim ...

  4. PHP header函数的几大作用

    先看看官方文档的定义 (PHP 4, PHP 5, PHP 7) header - 发送原生 HTTP 头 void header ( string $string [, bool $replace ...

  5. 【WPF】Winform调用WPF窗体注意事项

     1.需要添加一些引用 2.调用处使用如下方法进行调用 Window win= new Window(); ElementHost.EnableModelessKeyboardInterop(win) ...

  6. The Skyline Problem

    A city's skyline is the outer contour of the silhouette formed by all the buildings in that city whe ...

  7. C语言中的深拷贝和浅拷贝

    //C语言中的深拷贝和浅拷贝 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #inc ...

  8. C语言 指针与字符串

    C语言可以在栈区 or 堆区 or 全局区 存放字符串,字符串不单单是存储在全局区的. //字符串与指针 #include<stdio.h> #include<stdlib.h> ...

  9. RAS RC4 AES 加密 MD5

    这两者唯一的相同点是设计者中都包含了MIT的Ron Revist教授.RSA是公钥密码算法,优点:不用事先通过秘密信道传递密钥,可以用于数字签名.缺点:速度慢RC4是序列密码算法,优点:速度快,缺点: ...

  10. C# lambda表达式及初始化器

    using System;using System.Collections.Generic; using System.Linq; namespace ConsoleApplication1d { c ...