[置顶] poj1416数字切割解题报告
题意:有一段纸片,就是一个不超过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数字切割解题报告的更多相关文章
- 洛谷 P2501 [HAOI2006]数字序列 解题报告
P2501 [HAOI2006]数字序列 题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. ...
- [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总
本文出自 http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner 打开 这个专题一共有25题,刷完 ...
- 【剑指Offer】旋转数组中的最小数字 解题报告(Python)
[剑指Offer]旋转数组中的最小数字 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- 【剑指Offer】和为S的两个数字 解题报告(Python)
[剑指Offer]和为S的两个数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 【剑指Offer】数组中只出现一次的数字 解题报告(Python)
[剑指Offer]数组中只出现一次的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- 【剑指Offer】数字在排序数组中出现的次数 解题报告(Python)
[剑指Offer]数字在排序数组中出现的次数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interv ...
- 【剑指Offer】数组中出现次数超过一半的数字 解题报告(Python)
[剑指Offer]数组中出现次数超过一半的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-inter ...
- [置顶] 白话最小边覆盖总结--附加 hdu1151结题报告
刚开始看到这个题目的时候就觉得想法很明了,就是不知道如何去匹配... 去网上看了不少人的解题报告,但是对于刚接触“最小边覆盖”的我来说....还是很困难滴....于是自己又开始一如以往学习“最大独立集 ...
- hihoCoder 1037 数字三角形 最详细的解题报告
题目来源:hihoCoder 1037 数字三角形 解题思路:请好好看看 提示一.提示二.提示三 具体算法(java版,可以直接AC) import java.util.Scanner; public ...
随机推荐
- php定时执行任务的几个方法
PHP的实现决定了它没有Java和.Net这种AppServer的概念, 而http协议是一个无状态的协议, php只能被用户触发, 被调用, 调用后会自动退出内存, 没有常驻内存, 就没有办法准确的 ...
- JS判断终端(Android IOS)
function getMobileOperatingSystem() { var userAgent = navigator.userAgent || navigator.vendor || win ...
- JavaScript多线程初步学习
一.多线程理解 首先,我们要理解什么是多线程,百度百科上说:多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一 ...
- sphinx(coreseek)——1、增量索引
首先介绍一下 CoreSeek/Sphinx的发布包 indexer: 用于创建全文索引; search: 一个简单的命令行(CLI) 的测试程序,用于测试全文索引; search ...
- shell脚本中的标准输出重定向使用涵义
0表示标准输入 1表示标准输出 2表示标准错误输出 > 默认为标准输出重定向,与 1> 相同 2>&1 意思是把 标准错误输出 重定向到 标准输出. &>fil ...
- Python自动化运维之30、Flask框架
Flask 官网:http://flask.pocoo.org/ flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是 ...
- IOS各类问题
1.The resource could not be loaded because the App Transport Security policy requires the use of a s ...
- 实现OC与JS的交互
oc-->js stringByEvaluatingJavaScriptFromString,其参数是一NSString 字符串内容是js代码(这又可以是一个js函数.一句js代码或他们 ...
- nginx+uwsgi+django
上一涨讲解了如何使用nginx+uwsgi部署wsgi application 其实django配置方式和 application都一样,因为如果我们对application进行扩展就是一个WSGI ...
- 转:GraphicsMagick介绍及安装
原文来自于:http://www.cnblogs.com/cocowool/archive/2010/08/16/1800954.html GraphicsMagick 当前稳定版本:1.3.12(发 ...