本渣渣明天C语言考试,今天有点亢奋,又来了一题,这题感觉比前一题难多了,不仅是字符串转化为数字,即使看了百度提醒的搜索树,还是参考了一些百度的代码。感觉道阻且长,我仍需努力。下面是题目翻译:

公司现在要发明一种新的碎纸机,要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值。比如,target的值是50,而纸条上的数字是12346,应该把数字切成四部分,分别是1、2、34、6。因为这样所得到的和43 (= 1 + 2 + 34 + 6) 是所有可能中最接近而不超过50的。(比如1, 23, 4, 和6 就不可以,因为它们的和不如43接近50,而12, 34, 6也不可以,因为它们的和超过50了。碎纸还有以下三个要求:

1、如果target的值等于纸条上的值,则不能切。
2、如果没有办法把纸条上的数字切成小于target,则输出error。如target是1而纸条上的数字是123,则无论你如何切得到的和都比1大。
3、如果有超过一种以上的切法得到最佳值,则输出rejected。如target为15,纸条上的数字是111,则有以下两种切法11、1或者1、11.
你的任务是编写程序对数字进行划分以达到最佳值。

思路肯定是DFS无疑,比如50 12346这组数据,就是先取出1,递归求解2346,然后取出12,递归求解346,以此类推,遇到更大的sum并且小于等于目标值,就更新,这些还不算难,重要的是还要输出剪切这个数的方法,必须要记录路径,比如这个例子就是1 2 34 6,就可以用path=1121的数来记录,最后按照path来输出这个解。我感觉用字符串存数比数组略微方便点吧,毕竟数组还得从数字转换过来。输入后比较每一位的和是否大于目标值,若大于肯定是error(这是必须的啊),如果输入的和目标值相等,就直接输出,然后可以进行DFS,用一个数组记录每次和出现的次数,若result出现次数大于1,则输出rejected。本渣渣也是有所参考,仍需努力。

下面是代码。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a,sum,result,p,path;
int ss[1000005];
int number(char *b,int y)
{int sum1=0;for(int j=0;j<y;j++){sum1=sum1*10+(int)(b[j]-'0');}return sum1;
}
void dfs(char *sss,int lenn)
{if(lenn==0){ss[sum]++;if(sum<=a&&sum>result){result=sum;path=p;}return ;}for(int i=1;i<=lenn;i++){char b[10];int t=number(sss,i);sum+=t;if(sum>a) //剪枝,不需要往下找了,{sum-=t;return;}int x=0;for(int j=i;j<lenn;j++)b[x++]=sss[j];b[x]='\0';p=p*10+i;//组成路径dfs(b,lenn-i);sum-=t;//回溯p/=10;}return;
}
int main()
{int ttt,sum2,len,cc[7],dd[9],count,flag;char s[10];while(scanf("%d %s",&a,s)&&a&&s[0]!='0'){memset(ss,0,sizeof(ss));sum2=0;sum=0;ttt=0;len=strlen(s);//printf("%d",len);for(int i=0;i<len;i++){sum2+=(s[i]-'0');ttt=ttt*10+(s[i]-'0');}if(ttt==a){printf("%d %d\n",a,ttt);continue;}if(sum2>a){printf("error\n");continue;}result=-1;p=0;count=0;flag=0;dfs(s,len);if(ss[result]>1) printf("rejected\n");else{printf("%d ",result);while(path>0){cc[count++]=path%10;path/=10;}for(int i=count-1;i>=0;i--){for(int j=1;j<=cc[i];j++){printf("%c",s[flag++]);}if(i!=0) printf(" ");if(i==0) printf("\n");}}}return 0;
}


POJ1416 Shredding Company ACM解题报告(DFS回溯+剪枝)相关推荐

  1. poj1416:Shredding Company

    这里设置一个flag来记录发生了什么情况,0表示error,1表示正常,2表示拒绝. 逻辑主要如下: 如果和大于当前res并且小于target,那么更新值,记录所有分割情况,标记flag为1,接受 如 ...

  2. hdu2553 N皇后问题-dfs回溯剪枝+打表

    Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对于给定的N ...

  3. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  4. 山东科技大学第二届ACM校赛解题报告

    这次校赛的目的,是为了省赛测试各种程序是否有问题. 热身赛的逗比题有点打击我,感觉正式赛应该不会出这种问题.开始的时候直接上了A题,然后大概是第六,前面好多友情队,正式队排名第二. 然后读了读B题,稍 ...

  5. 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...

  6. 解题报告(十三)中国剩余定理(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  7. 解题报告(四)生成函数(ACM/ OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  8. 解题报告(五)组合计数(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. 解题报告(一)F、(2018 ACM - ICPC shenyang I)Distance Between Sweethearts(数学期望 + 乘法原理 + FWT)(4.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

最新文章

  1. windows无法配置此无线连接_Kubernetes 1.18功能详解:OIDC发现、Windows节点支持,还有哪些新特性值得期待?...
  2. java中HashMap详解
  3. Ubuntu中运行pip时报错
  4. 支持自动水平拆分的高性能分布式数据库TDSQL
  5. struts2中用interceptor实现权限控制
  6. 快手公司厕所装坑位计时器,网友:再也不能带薪拉屎了!
  7. python邮箱配置_python flask mail QQ邮箱配置
  8. mysql 如何把整列数据*10_10张图告诉你,MySQL 是如何查找数据的?
  9. Xmind 常用快捷键列表(官方推荐)
  10. 一道快手面试题,击败了100%用户
  11. 新时代的web与app开发
  12. Flexbox 布局教程
  13. Hibernate重附(Reattach)和合并(Merge)操作的比较
  14. vs 中代码的字体也颜色设置
  15. android root刷机包包,安卓ROOT卡刷包通用版【安致提供】
  16. 谷歌SEO长尾关键词挖掘方法
  17. 2020年《时间的朋友》跨年演讲金句集锦
  18. DDoS 攻击防御方法
  19. shell运行python脚本报错没有包_脚本安装Discuz论坛(shell + Python 实现自动化安装)...
  20. 128、H3C交换机恢复出厂和各种基本配置

热门文章

  1. 日用化妆品行业如何利用订货软件进行统一管理
  2. 游戏架构 游戏架构设计(12)
  3. 后端验证 Facebook 登录是否有效
  4. 自动化测试工具 AirTest 的使用方法与简介
  5. Chrome Extension 动手实操
  6. Android Studio基于mob的短信验证
  7. android tabhost黑色背景,关于Android TabHost切换Tab字体的颜色背景颜色改变
  8. MindNode针对apple M1进行了优化更新
  9. 组合和继承之间的区别
  10. pox.xml常用依赖