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 查了 ...
随机推荐
- POJ 1191 棋盘分割(DP)
题目链接 题意 : 中文题不详述. 思路 : 黑书上116页讲的很详细.不过你需要在之前预处理一下面积,那样的话之后列式子比较方便一些. 先把均方差那个公式变形, 另X表示x的平均值,两边平方得 平均 ...
- tomcat源码导入eclipse
1. 获取源代码 方式一:从官网http://tomcat.apache.org/download-70.cgi 直接下载,官网提供了Binary 和 Source Code两种下载方式,要研究tom ...
- iOS使用Charts框架绘制—柱形图
首先看一下最终要实现的效果: 最终效果 一.初始化barChartView 绘制柱形图需要用到BarChartView这个类,下面是初始化代码: self.barChartView = [[BarCh ...
- c语言中static的用法
1.static定义变量: 1).局部: a.静态局部变量在函数内部定义,生存期为整个源代码,但作用域与自动变量相同,只能在定义的函数里面使用.退出该函数后,虽然此变量还存在内存中,但不能使用. b. ...
- Android 时间轴TimeLine
代码:这里
- HTML 中的meta标签中的http-equiv与name属性使用介绍
meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言, ...
- BZOJ 3143 游走(高斯消元)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3143 题意:一个无向连通图,顶点从1编号到n,边从1编号到m.小Z在该图上进行随机游走, ...
- 转:Cache相关
声明:本文截取自http://blog.163.com/ac_victory/blog/static/1033187262010325113928577/ (1)“Cache”是什么 Cache(即高 ...
- C++ STL之deque的基本操作
前两篇博文中已经介绍了vector和list的两种容器,我们发现他们各有各的优缺点,vector在内存中连续存储,支持随机访问,但是查找和删除的效率比较低,而list在内存中是链式存储的查找和删除的效 ...
- C# 常用控件及单击事件
1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2)WindowState属性: 用来获取或设置窗体的窗口状态. 取值有三种: No ...