题意:有一段纸片,就是一个不超过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. gvim 常用命令

    插入: insert 强退: :q! 退出: :q 保存: :w 保存退出::wq 复制: yy(单行)   多行:8yy 删除: dd(单行)   多行:8dd 或者 :4,8d 执行脚本: :! ...

  2. 网页布局只mian部分左右固定,中间部分自适应

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Bootstrap_Javascript_固定定位

    Affix 插件可以对任何元素进行固定定位,其中比较简单的方法,就是通过自定义属性 data 来触发.其主要包括两个参数: 1.data-spy:取值 affix,表示元素固定不变的. 2.data- ...

  4. Android自定义View基础

    自定义控件, 视频教程 http://www.jikexueyuan.com/course/1748.html 1. 编写自定义view 2. 加入逻辑线程 3. 提取和封装自定义view 4. 利用 ...

  5. openerp import l field size limit

    modify the file addons/base_import/models.py add the following line at the very begining of the _con ...

  6. UFLDL实验报告2:Sparse Autoencoder

    Sparse Autoencoder稀疏自编码器实验报告 1.Sparse Autoencoder稀疏自编码器实验描述 自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值, ...

  7. windows server 2012 iis8.0部署mvc报错

    一开始以为需要在服务器装mvc在很多论坛找过也问了朋友都说需要装mvc,经过两天研究是不需要装mvc的只需要在项目的bin文件夹下放入下面三个dll. 未能加载文件或程序集“System.Web.Ht ...

  8. 关于Unity导出的Android应用在小米、联想等机型上崩溃的问题

    应用在三星手机上运行没有出现问题,但在小米和联想手机上会崩溃.这个问题在刚开始时一直查不到问题所在,后来发现是因为Android清单文件中声明的权限出现了重复,去掉了重复的权限之后,就没有出现崩溃的情 ...

  9. 【Java】怎么回答java垃圾回收机制

    (1) GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象 ...

  10. Cognos请求流程——<转>

    访问Cognos8 匿名访问 用户通过浏览器发起Cognos访问请求,请求被送至Cognos Gateway Gateway接收请求并发送给一个dispatcher dispatcher发现请求没有附 ...