Bigger is Better
题意:
有n个火柴棒,已知拼成9个数字花费的数目,求能拼出的能整除m的最大数
分析:
dp[i][j]表示,用i个火柴棒,拼出的数余m余数为j时的最大数
int tmp=dp[i][j]*10+k;(k是拼成的某个数)
dp[i+num[k]][tmp%m]=max(dp[i+num[k]][tmp%m],tmp);
这个数很大,用java写超时了两发,只能用大数模拟。
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define read freopen("in.txt", "r", stdin)
const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod = ;
int n,m;
struct bignum
{
int l;
char a[];
void zclear()
{
while (a[l-]==) l--;
}
void set(char v)
{
memset(a,,sizeof(a));
l=;
a[]=v;
if (v==) l=;
}
void add(char v)
{
char i;
a[]+=v;
for (i=;i<l;++i)
{
if (a[i]>=)
{
a[i+]++;
a[i]-=;
}
else break;
}
if (a[l]>) l++;
zclear();
}
void mul10()
{
for (int i=l;i>;--i)
a[i]=a[i-];
a[]=;
l++;
zclear();
}
bool bigger(bignum ta)
{
ta.zclear();zclear();
if (ta.l!=l) return l>ta.l;
for (int i=l-;i>=;--i)
if (ta.a[i]!=a[i]) return a[i]>ta.a[i];
}
void give(bignum ta)
{
l=ta.l;
memcpy(a,ta.a,sizeof(char)*);
}
void output()
{
if (a[]==-||l==)
{
if (n>=) printf("0\n");
else printf("-1\n");
return;
}
for (int i=l-;i>=;--i)
printf("%d",(char)a[i]);
printf("\n");
}
};
bignum dp[][];
int num[]={,,,,,,,,,};
int ca=;
int i,j,k;
int main()
{
while (scanf("%d",&n),n)
{
scanf("%d",&m);
for (i=;i<=n;++i)
for (j=;j<m;++j)
dp[i][j].set(-);
for (i=;i<;++i)
dp[num[i]][i%m].set((char)i);
for (i=;i<=n;++i)
for (j=;j<m;++j)
if (dp[i][j].a[]!=-)
{
for (k=;k<;++k)
{
int x=i+num[k];
int y=(j*%m+k%m)%m;
if (x>n) continue;
bignum temp;
temp.give(dp[i][j]);
temp.mul10();
temp.add((char)k);
if (temp.bigger(dp[x][y]))
dp[x][y].give(temp);
}
}
bignum minv;
minv.set(-);
for (i=;i<=n;++i)
if (dp[i][].bigger(minv)) minv.give(dp[i][]);
printf("Case %d: ",++ca);
minv.output();
}
return ;
}
Bigger is Better的更多相关文章
- spark - tasks is bigger than spark.driver.maxResultSize
Error ERROR TaskSetManager: Total size of serialized results of 8113 tasks (1131.0 MB) is bigger tha ...
- MYSQL 内存报错 Use 'mysqld --thread_stack=#' to specify a bigger stack.
今天在使用mysql的过程中,连接数据库始终无法成功 最后发现是数据库无法执行增加修改的操作 :错误代码 Thread stack overrun: 11552 bytes used of a 13 ...
- 数据库执行sql报错Got a packet bigger than 'max_allowed_packet' bytes及重启mysql
准备在mysql上使用数据库A,但mysql5经过重装后,上面的数据库已丢失,只得通过之前备份的A.sql重新生成数据库A. 1.执行sql报错 在执行A.sql的过程中,出现如下错误:Got a p ...
- HDU2929 Bigger is Better[DP 打印方案 !]
Bigger is Better Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDOJ 2929 Bigger is Better
DP....好难的DP... Bigger is Better Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...
- don't forget the bigger picture
Imagine a circle that contains all of human knowledge: By the time you finish elementary school, you ...
- Got a packet bigger than 'max_allowed_packet' bytes
昨天用导入数据的时候发现有的地方有这个错误.后来才发现我用RPM包装的MYSQL配置文件里面有old_passwords=1去掉就可以了. Got a packet bigger than ‘max_ ...
- Navicat导入数据时发生了报错 --- 1153 - Got a packet bigger than 'max_allowed的处理办法
今天我在使用Navicat导入.sql文件数据时,发现本来是80万条的数据,结果只导入了10万条左右,而且在其错误信息日志中,我发现了这样一条错误:1153 - Got a packet bigger ...
- Navicat 导入数据报错 --- 1153 - Got a packet bigger than 'max_allowed_packet' bytes
在用Navicat导入SQL文件时报错:MySql 错误 Err [Imp] 1153 - Got a packet bigger than 'max_allowed_packet' bytes 查了 ...
随机推荐
- [转]Openstack Havana Dashboard测试和使用
转贴一篇陈沙克老师的文章:http://www.chenshake.com/openstack-havana-dashboard-to-test-and-use/ Openstack Havana D ...
- lintcode:数飞机
数飞机 给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机? 如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权. 样例 对于每架飞机的起降时间列表 ...
- C++Builder和VC的比较
C++Builder和VC的比较 其实很久以前我就想写这篇文章,其原因一方面是因为笔者深深感觉到C++ Builder的确是一个先进与强大的程式开发工具,但更最重要的一点是,我深信C++ Builde ...
- Generic repository pattern and Unit of work with Entity framework
原文 Generic repository pattern and Unit of work with Entity framework Repository pattern is an abstra ...
- 249. Group Shifted Strings
题目: Given a string, we can "shift" each of its letter to its successive letter, for exampl ...
- 机器学习 —— log-linear 模型
昨天刚刚解决了 logistic regression 之后今天又来了个有趣的家伙. logistic regression 很强大,但是也有它的弱点.它最大的弱点就是只能告诉你是或者不是,而无法告诉 ...
- linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
在home目录下有wwwroot目录,wwwroot下有sinozzz目录,即/home/wwwroot/sinozzz 一.目录创建 在/home/wwwroot目录下新建一个sinozzz123的 ...
- 对于oracle监听器的配置
oracle 的 net configuration assist中配置完第一项的监听程序配置(对应文件listener.ora)之后,还要重新配置下第三项本地网络服务名配置(对应文件tnsname ...
- 函数flst_remove
移除 node, node->prev直接指向node->next /*********************************************************** ...
- LinQ综合应用实例
直接上代码,内容很浅显易懂,在这里就不做更多的解释,解释见代码注释. using System; using System.Collections.Generic; using System.Linq ...