题意:有一段纸片,就是一个不超过7位数的整数,现在给定你一个目标值 aim ,让你去选择把纸片切成几段,然后这个几段的和值 最接近 aim 且不超过 aim,

分析:

对于这个纸段,比如一个 四位数的 1234,那么第一你就有以下几种切法:  (1、234)  (1、2、34)  (1、2、3、4) (12、34) ().........那么 对于这么多个情况,我们就想一个不重复 的 有顺序的切割方式.....

比如我按照切的次数,第一次....我可以把第一个数字切下来,,,,也可以把第一和第二个数字切下来,那么就如下图有:

那么图中就画出的几个 组合...(1、2、3、4)(1、2、34)(1、23、4)那么可以用一个for循环来处理这个切的过程....然后就按照这个dfs,下面给出代码....

// 164K 0MS
#include<stdio.h>
#include<string.h> int aim;
char shred[7];//要切割的数字,做字符串处理 int max_sum;//最大值次数
int flag_max;//最大值
int shred_sum;//切割次数
int ans[7];//最终结果
int ans_flag[7];//临时结果保存 void dfs(int x,int num,int y)//这里表示我们从第x 位开始切,当前切得值为num,切的次数为 y
{
if(num > aim) return;//寻找不超过目标的最大...那么超过就直接返回
if(x >= strlen(shred))//因为我们从1 开始dfs,那么这里 到刚好 > 的时候就是切出一个答案的时候
{
if(num > flag_max)//比我们标记的最大值还大就更新
{
max_sum = 1;
flag_max = num;
for(int q = 0 ; q < y ; q ++)//这里把ans最终结果先更新
ans[q] = ans_flag[q];
shred_sum = y;
}
else if(num == flag_max)
max_sum = 2;
}
int sum = 0;
for(int i = x ; i < strlen(shred); i ++) //我们从当前的x 位置 一个一个尝试
{
sum *= 10;
sum += shred[i]-'0'; //那么这里就是对于每一次切得到这个值
ans_flag[y] = sum;// 具体的过程,前面有说到的图形解释,后面结合图形有详细说明
dfs(i+1,sum+num,y+1);
}
} int main()
{
int i;
int sum1,sum2;
while(scanf("%d%s",&aim,shred))
{
sum1 = sum2 = 0;
if(aim+(shred[0]-'0') == 0)
break; max_sum = shred_sum = 0;
flag_max = 0;
dfs(0,0,0); if(max_sum == 0)
printf("error\n");
else if(max_sum > 1)
printf("rejected\n");
else
{
printf("%d",flag_max);
for(i = 0 ;i < shred_sum ; i ++)
printf(" %d",ans[i]);
printf("\n");
}
}
return 0;
}


个人愚昧观点...欢迎指正和讨论;;;

[置顶] poj1416数字切割解题报告的更多相关文章

  1. 洛谷 P2501 [HAOI2006]数字序列 解题报告

    P2501 [HAOI2006]数字序列 题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. ...

  2. [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总

    本文出自   http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner  打开 这个专题一共有25题,刷完 ...

  3. 【剑指Offer】旋转数组中的最小数字 解题报告(Python)

    [剑指Offer]旋转数组中的最小数字 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  4. 【剑指Offer】和为S的两个数字 解题报告(Python)

    [剑指Offer]和为S的两个数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  5. 【剑指Offer】数组中只出现一次的数字 解题报告(Python)

    [剑指Offer]数组中只出现一次的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  6. 【剑指Offer】数字在排序数组中出现的次数 解题报告(Python)

    [剑指Offer]数字在排序数组中出现的次数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interv ...

  7. 【剑指Offer】数组中出现次数超过一半的数字 解题报告(Python)

    [剑指Offer]数组中出现次数超过一半的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-inter ...

  8. [置顶] 白话最小边覆盖总结--附加 hdu1151结题报告

    刚开始看到这个题目的时候就觉得想法很明了,就是不知道如何去匹配... 去网上看了不少人的解题报告,但是对于刚接触“最小边覆盖”的我来说....还是很困难滴....于是自己又开始一如以往学习“最大独立集 ...

  9. hihoCoder 1037 数字三角形 最详细的解题报告

    题目来源:hihoCoder 1037 数字三角形 解题思路:请好好看看 提示一.提示二.提示三 具体算法(java版,可以直接AC) import java.util.Scanner; public ...

随机推荐

  1. fish code

    <embed width="272" height="180" type="application/x-shockwave-flash" ...

  2. centos 安装vnc服务

    1.安装tigervnc-server yum install tigervnc-server 2.启动vnc服务 vncserver:1 [错误提示待解决bad display name " ...

  3. NPOI读写Excel0307

    #region NPOI 操作 Excel 2007 /// <summary> /// 将Excel文件中的数据读出到DataTable中(xlsx) /// </summary& ...

  4. node应用通过multer模块实现文件上传

    multer用于处理文件上传的nodejs中间件,主要跟express框架搭配使用,只支持表单MIME编码为multipart/form-data类型的数据请求. 如果要处理其他编码的表单数据可以通过 ...

  5. div浮动框居于浏览器窗口中间

    代码先贴这里,随后再改 <script language="JavaScript"> document.getElementById('divCenter').styl ...

  6. 面试小结(java基础)

    一个.java源文件中可以有多个类吗?(内部类除外)有什么条件?带着这个疑惑,动手建几个测试类, 揭开心中的疑惑.以下是解开疑惑过程: package test;/** * 一个.java源文件中可以 ...

  7. odoo view field option, action flage 参数

    options JSON object specifying configuration option for the field's widget (including default widget ...

  8. Python Tutorial 学习(七)--Input and Output

    7. Input and Output Python里面有多种方式展示程序的输出.或是用便于人阅读的方式打印出来,或是存储到文件中以便将来使用.... 本章将对这些方法予以讨论. 两种将其他类型的值转 ...

  9. uboot总结:uboot配置和启动过程2(mkconfig分析)

    说明:文件位置:在uboot的目录下,文件名为:mkconfig.本身是一个脚本文件. 它的主要作用的是: (1)创建一个重要的符号链接 (2)创建一个config.mk文件(在include目录下) ...

  10. gcc常用的编译选项

    一.程序编译过程 程序编译的时候,要分四个阶段 : 1.预处理阶段,完成宏定义和include文件展开等工作: 2.根据编译参数进行不同程度的优化,编译成汇编代码: 3.用汇编器把汇编代码进一步生成目 ...