题意:

有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. hdu 3441 Rotation

    总的来说,这题要2次用到polya定理. 由题目条件A*A=B*B+1,变形为(A-1)*(A+1)=K*B*B; 分别分解A-1和A+1的质因数,在合并在一起. 第一步:搜索B,对B*B的正方形涂色 ...

  2. NOIP 2015提高组复赛

    神奇的幻方 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第 ...

  3. eclipse怎么集成配置JDK和Tomcat

    eclipse怎么集成配置JDK和Tomcat_电脑软件_百度经验http://jingyan.baidu.com/album/db55b609ab6a1f4ba30a2f2c.html?picind ...

  4. photoshop:多边形选项

    你会制作圆滑的五角星吗? 以五边形为例:

  5. WCF入门(七)---自托管消费WCF服务

    费自托管WCF服务的整个过程,一步步地解释以及充足的编码和屏幕截图是非常有必要. 第1步:服务托管,现在我们需要实现的代理类客户端.创建代理的方式不同. 使用svcutil.exe,我们可以创建代理类 ...

  6. 33. Search in Rotated Sorted Array

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7  ...

  7. centos 安装openssl 以及库文件

    yum install openssl yum install openssl-devel

  8. mac更新node

    今天在用 yeoman 的时候,提示对 npm 和 node 的版本有要求,为了决绝以后遇到的一些类似的问题,我决定定期对 node 和 npm 进行更新. npm的更新: $ sudo npm in ...

  9. oracle判断一个字符串中是否包含另外一个字符串

    select * from a where instr(a,b)>0; 用于实现B字段是A字段中的某一部分的时候,要论顺序或者要相邻的字符. 如果想要不论顺序或者不相邻的字符时,定义函数可以实现 ...

  10. uva111346Probability

    求导. 大水题... 写这个题的目的就是要强调一些细节. printf输出%时要用2个%. 如果S>a*b的话,直接输出0,如果太小,直接输出100. 求导就不说了// 最关键的地方一笔带过?我 ...