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 ...
随机推荐
- C# 递归获取 文件夹的 所有文件
public void Director(string dir, List<string> list) { DirectoryInfo d = new DirectoryInfo(dir) ...
- struts2漏洞信息
渗透篇01-struts2漏洞利用 https://blog.csdn.net/qq_38055050/article/details/79841604 Struts2著名RCE漏洞引发的十年之思 ...
- Java多线程及线程状态转换
以下内容整理自:http://blog.csdn.net/wtyvhreal/article/details/44176369 线程:是指进程中的一个执行流程. 线程与进程的区别:每个进程都需要操作 ...
- java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #1) for method ApiService.getMethod
@FormUrlEncoded @POST("getMethod") Observable<Bean> getMethod(String field); 今天在写Ret ...
- jQuery文档就绪事件
[jQuery文档就绪事件] 为了防止文档在完全加载(就绪)之前运行 jQuery 代码.如果在文档没有完全加载之前就运行函数,操作可能失败. $(document).ready(function() ...
- mysql创建用户和库
先用root登陆mysql,然后运行下面代码创建mysql用户和库 下面创建的帐号:test123 密码:123456 库名:test123 CREATE USER '; GRANT USAGE ...
- vue生命周期简介
vue生命周期简介 生命周期的钩子 LifeCycle hooks 上面已经能够清晰的看到vue2.0都包含了哪些生命周期的钩子函数~~ 那么 执行顺序以及什么时候执行,我们上代码来看~~~ 生命周期 ...
- as3.0用了视频组件,导致视频打开后就全屏,加一下代码就行
myFlv.fullScreenTakeOver = false; fullScreenTakeOver : Boolean 舞台进入全屏模式时,FLVPlayback 组件位于所有内容的顶部并占据整 ...
- Django的具体操作(二)
今日内容:用户登录以及分页的实现 views.py # 登录动作 def login_action(request): # 必须继承request if request.method == 'POST ...
- sqlserver还原数据库失败,sql2008备份集中的数据库备份与现有的xxx数据库不同
正常操作发现报标题错误,百度后解决思路如下(@参考文章)转到选项下面,勾选覆盖现有数据库即可