题意:

有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的更多相关文章

  1. 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 ...

  2. MYSQL 内存报错 Use 'mysqld --thread_stack=#' to specify a bigger stack.

    今天在使用mysql的过程中,连接数据库始终无法成功 最后发现是数据库无法执行增加修改的操作 :错误代码 Thread stack overrun:  11552 bytes used of a 13 ...

  3. 数据库执行sql报错Got a packet bigger than 'max_allowed_packet' bytes及重启mysql

    准备在mysql上使用数据库A,但mysql5经过重装后,上面的数据库已丢失,只得通过之前备份的A.sql重新生成数据库A. 1.执行sql报错 在执行A.sql的过程中,出现如下错误:Got a p ...

  4. HDU2929 Bigger is Better[DP 打印方案 !]

    Bigger is Better Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. HDOJ 2929 Bigger is Better

    DP....好难的DP... Bigger is Better Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  6. don't forget the bigger picture

    Imagine a circle that contains all of human knowledge: By the time you finish elementary school, you ...

  7. Got a packet bigger than 'max_allowed_packet' bytes

    昨天用导入数据的时候发现有的地方有这个错误.后来才发现我用RPM包装的MYSQL配置文件里面有old_passwords=1去掉就可以了. Got a packet bigger than ‘max_ ...

  8. Navicat导入数据时发生了报错 --- 1153 - Got a packet bigger than 'max_allowed的处理办法

    今天我在使用Navicat导入.sql文件数据时,发现本来是80万条的数据,结果只导入了10万条左右,而且在其错误信息日志中,我发现了这样一条错误:1153 - Got a packet bigger ...

  9. 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 查了 ...

随机推荐

  1. [转]Openstack Havana Dashboard测试和使用

    转贴一篇陈沙克老师的文章:http://www.chenshake.com/openstack-havana-dashboard-to-test-and-use/ Openstack Havana D ...

  2. lintcode:数飞机

    数飞机 给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机? 如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权. 样例 对于每架飞机的起降时间列表 ...

  3. C++Builder和VC的比较

    C++Builder和VC的比较 其实很久以前我就想写这篇文章,其原因一方面是因为笔者深深感觉到C++ Builder的确是一个先进与强大的程式开发工具,但更最重要的一点是,我深信C++ Builde ...

  4. 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 ...

  5. 249. Group Shifted Strings

    题目: Given a string, we can "shift" each of its letter to its successive letter, for exampl ...

  6. 机器学习 —— log-linear 模型

    昨天刚刚解决了 logistic regression 之后今天又来了个有趣的家伙. logistic regression 很强大,但是也有它的弱点.它最大的弱点就是只能告诉你是或者不是,而无法告诉 ...

  7. linux下文件夹的创建、复制、剪切、重命名、清空和删除命令

    在home目录下有wwwroot目录,wwwroot下有sinozzz目录,即/home/wwwroot/sinozzz 一.目录创建 在/home/wwwroot目录下新建一个sinozzz123的 ...

  8. 对于oracle监听器的配置

    oracle 的 net configuration  assist中配置完第一项的监听程序配置(对应文件listener.ora)之后,还要重新配置下第三项本地网络服务名配置(对应文件tnsname ...

  9. 函数flst_remove

    移除 node, node->prev直接指向node->next /*********************************************************** ...

  10. LinQ综合应用实例

    直接上代码,内容很浅显易懂,在这里就不做更多的解释,解释见代码注释. using System; using System.Collections.Generic; using System.Linq ...