hdu 1539 & poj 1416 某某公司
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1539
大意是输入n和m,把m按顺序拆分成若干个数,问这些数和的在小于n的前提下最大为多少
注意必须m的每一位都不能漏,而且要按顺序拆
比如第一个例子 拆成的各个数为1,2,34 和6,可以拆成34,346但不能是36或364,要按顺序
而他们和的最大是43
如果找不出拆法能使各个数的和小于n,输出error
如果有不止一种拆法子,输出 rejected
0 0的时候结束 m最多为六位数
这道题在杭电和北大的oj上都有,但是杭电的数据更强,链接就是杭电的
既然是按顺序拆,可以看成只是在各个位之间放空格就好了 利用深搜的思想
从m的第一位开始往后取位,取到刚大于n的前一位(还是小于n的),把取的数加上然后以这一位为起点继续取
取到的这一位做标记,最后输出的时候没有标记的位数就不要输出空格
我觉得类似于排列组合的DFS
#include<cstdio>
#include<cstring>
using namespace std;
int n,ans,a[],b[],k;
bool flag,pand[],dapand[];
void dfs(int pos,int sum,int num)
{
if (sum+num>n)
return ;
if (pos==k)
{
sum+=num;
if (sum<=n&&sum>ans)
{
ans=sum;
flag=false;
for (int i = ; i < k; i++)
dapand[i] = pand[i];
return ;
}
if (sum==ans)
flag=true;
return ;
}
dfs(pos+,sum,num*+a[pos]);//区位置
pand[pos]=true;
dfs(pos+,sum+num,a[pos]);//加和做比较
pand[pos]=false;
}
int main()
{
int m,i;
while (~scanf("%d %d",&n,&m))
{
if (n==&&m==)
break;
memset(pand,false,sizeof(pand));
ans=-;k=;
flag=true;
while (m)
{
b[k++]=m%;
m/=;
}
for (i=;i<k;i++)
a[i]=b[k-i-];
dfs(,,a[]);
if (ans==-)
{
printf("error\n");
continue;
}
if (flag)
{
printf("rejected\n");
continue;
}
printf("%d ",ans);
for (i=;i<k;i++)
{
if (dapand[i])
printf(" ");
printf("%d",a[i]);
}
printf("\n");
}
return ;
}
hdu 1539 & poj 1416 某某公司的更多相关文章
- 搜索+剪枝 POJ 1416 Shredding Company
POJ 1416 Shredding Company Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5231 Accep ...
- HDU 3695 / POJ 3987 Computer Virus on Planet Pandora(AC自动机)(2010 Asia Fuzhou Regional Contest)
Description Aliens on planet Pandora also write computer programs like us. Their programs only consi ...
- hdu 2844 poj 1742 Coins
hdu 2844 poj 1742 Coins 题目相同,但是时限不同,原本上面的多重背包我初始化为0,f[0] = 1;用位或进行优化,f[i]=1表示可以兑成i,0表示不能. 在poj上运行时间正 ...
- HDU 3265/POJ 3832 Posters(扫描线+线段树)(2009 Asia Ningbo Regional)
Description Ted has a new house with a huge window. In this big summer, Ted decides to decorate the ...
- HDU 2494/POJ 3930 Elevator(模拟)(2008 Asia Regional Beijing)
Description Too worrying about the house price bubble, poor Mike sold his house and rent an apartmen ...
- 扫描线三巨头 hdu1928&&hdu 1255 && hdu 1542 [POJ 1151]
学习链接:http://blog.csdn.net/lwt36/article/details/48908031 学习扫描线主要学习的是一种扫描的思想,后期可以求解很多问题. 扫描线求矩形周长并 hd ...
- POJ 1416 Shredding Company【dfs入门】
题目传送门:http://poj.org/problem?id=1416 Shredding Company Time Limit: 1000MS Memory Limit: 10000K Tot ...
- hdu 1540/POJ 2892 Tunnel Warfare 【线段树区间合并】
Tunnel Warfare Time Limit: 4000/2000 MS ...
- Coins HDU - 2844 POJ - 1742
Coins HDU - 2844 POJ - 1742 多重背包可行性 当做一般多重背包,二进制优化 #include<cstdio> #include<cstring> in ...
随机推荐
- Pandas数据排序
Pandas数据排序 .sort_index() 在指定轴上根据索引进行排序,索引排序后内容会跟随排序 b = pd.DataFrame(np.arange(20).reshape(4,5),inde ...
- js固定底部菜单
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- vs2017中char* str = "1234asd56";会报错,——const char*类型的值不能用于初始化char*类型的实体
原因: "1234asd56"是常量 ,正确的写法本身就是:const char* str = "1234asd56"; 之所以之前的vs版本可以写成char* ...
- 定时删除文件夹"$1"下最后修改时间大于当前时间"$2"天的文件
shell 脚本: #!/bin/bash now=`date "+%Y-%m-%d_%H:%M:%S"` #获取当前时间 echo "当前时间: " ...
- 与元素类型 "item" 相关联的 "name" 属性值不能包含 '<' 字符。
Android Studio 打包时,报错: 与元素类型 "item" 相关联的 "name" 属性值不能包含 '<' 字符. 这个问题自己百度也没有发现 ...
- 1.3.8、CDH 搭建Hadoop在安装之前(端口---Apache Flume和Apache Solr使用的端口)
Apache Flume和Apache Solr使用的端口 Apache Flume用于与Apache Solr通信的端口可能会有所不同,具体取决于您的配置以及是否使用安全性(例如,SSL).使用Fl ...
- 搭建ssm环境
在eclipse下搭建ssm框架. 1.新建maven项目. 2.添加jar包依赖 3.修改web.xml配置文件 <?xml version="1.0" encoding= ...
- 六、Prototype 原型设计模式
需求:使用 new 生成实例需要指定类名,在不指定类的情况下生成实例 代码清单: 原型接口 Product: public interface Product extends Cloneable{ v ...
- telnet ip/域名 端口 是否成功
有时候会ping ip 通,但是telnet不通,可能端口未开. telnet不成功,则显示不能打开到主机的链接,链接失败 . telnet成功,则进入telnet页面(全黑的),证明端口可用.
- HTTP/1.1新建会话失败 解决方法及分析
右键我的电脑—>属性—>点击高级项卡—>设置性能,在性能选项中选择高级选项卡,在虚拟内存处显示“所有驱动器文件大小的总数:0M”,原来问题出在这里,由于操作系统的分页内存太小,而引起 ...