$CF41D\ Pawn$
与这题 灰常的相似
然后内存可能过大 开个滚动数组
因为数塔问题总是 只需要上面一行的两个状态(这题就是数塔问题)
下面的代码与原题不符。(原题要输出路径)想抄的可以走了
输出路径只需要数组记录一下就好了。
#ifdef Dubug
#endif
#include <bits/stdc++.h>
using namespace std;
typedef long long LL ;
inline LL In() {
LL res(0),f(1);
register char c ;
while(isspace(c=getchar())) ;
c == '-'? f = -1 , c = getchar() : 0 ;
while(res = (res << 1) + (res << 3) + (c & 15) , isdigit(c=getchar())) ;
return res * f ;
}
int n , m , k ;
const int N = 900 + 5 ;
const int Arr = 100 + 5 ;
short num[Arr][Arr] ;
bool dp[Arr][Arr][N] ;
bool b[N] ;
char s[Arr] ;
inline void get(int x) {
for(register int i=1; i<=N/x; i++) b[i*x] = true ;
return ;
}
inline void Ot() {
memset(dp,0,sizeof(dp)) ;
for(register int j=1; j<=m; j++) dp[n][j][num[n][j]] = true ;
for(register int i=n-1; i>=1; i--)
for(register int j=1; j<=m; j++)
for(register int q=0; q<N; q++) {
if(dp[(i+1)][j-1][q]) dp[i][j][q+num[i][j]] = true ;
if(dp[(i+1)][j+1][q]) dp[i][j][q+num[i][j]] = true ;
}
int Max = -1 ;
for(register int i=1; i<=m; i++)
for(register int q=0; q<N; q++) if(dp[1][i][q] and b[q]) Max = max (Max,q) ;
cout << Max << endl ;
}
signed main() {
#ifdef Online_Judge
freopen("test.in","r",stdin) ;
freopen("testdata.out","w",stdout) ;
#endif
n = In() , m = In() , k = In() ;
for(register int i=1; i<=n; i++) {
scanf("%s",s+1);
for(register int j=1; j<=m; j++) num[i][j] = s[j]&15 ;
}
get(k+1) ;
return Ot() , 0 ;
}
#ifdef Dubug
#endif
#include <bits/stdc++.h>
using namespace std;
typedef long long LL ;
inline LL In() {
LL res(0),f(1);
register char c ;
while(isspace(c=getchar())) ;
c == '-'? f = -1 , c = getchar() : 0 ;
while(res = (res << 1) + (res << 3) + (c & 15) , isdigit(c=getchar())) ;
return res * f ;
}
int n , m , k ;
const int N = 900 + 5 ;
const int Arr = 100 + 5 ;
short num[Arr][Arr] ;
bool dp[2][Arr][N] ;
bool b[N] ;
char s[Arr] ;
inline void get(int x) {
memset(b,false,sizeof(b)) ;
for(register int i=1; i<=N/x; i++) b[i*x] = true ;
return ;
}
inline void Ot() {
memset(dp,0,sizeof(dp)) ;
for(register int j=1; j<=m; j++) dp[n&1][j][num[n][j]] = true ;
for(register int i=n-1; i>=1; i--)
for(register int j=1; j<=m; j++)
for(register int q=0; q<N; q++) {
if(dp[(i+1)&1][j-1][q]) dp[i&1][j][q+num[i][j]] = true ;
if(dp[(i+1)&1][j+1][q]) dp[i&1][j][q+num[i][j]] = true ;
}
int Max = -1 ;
for(register int j=1; j<=m; j++)
for(register int q=0; q<N; q++) if(dp[1][j][q] and b[q]) Max = max (Max,q) ;
cout << Max << endl ;
}
signed main() {
#ifdef Online_Judge
freopen("test.in","r",stdin) ;
freopen("testdata.out","w",stdout) ;
#endif
n = In() , m = In() , k = In() ;
for(register int i=1; i<=n; i++) {
scanf("%s",s+1);
for(register int j=1; j<=m; j++) num[i][j] = s[j]&15 ;
}
get(k+1) ;
return Ot() , 0 ;
}
随机推荐
- application对象的使用
application对象的使用 制作人:全心全意 application对象用于保存所有应用程序中的公有数据.它在服务器启动时自动创建,在服务器停止时销毁.当application对象没有被销毁时, ...
- AD7606
在只给芯片的RANGE和PAR_SER引脚上电(不给芯片加电)的时候,芯片严重发热. 改回给芯片加电,发热消失,芯片正常工作,芯片没有损坏. 版权声明:本文为博主原创文章,未经博主允许不得转载.
- unigui的ini文件读写【6】
procedure THeaderFooterForm.writerParas; var IniFile : TIniFile; begin try IniFile:=TIniFile.Create( ...
- 【Codeforces 339C】Xenia and Weights
[链接] 我是链接,点我呀:) [题意] 在天平上放砝码 你要在左边放一下然后到右边放一下 一直重复这样放m次 每次你放在其中一边都要让另外一边的重量比你少 你可以用1~10中的某些砝码 问你要怎样放 ...
- 使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件(转)-----https://www.cnblogs.com/smileberry/p/4145872.html
https://www.cnblogs.com/smileberry/p/4145872.html 使用Mybatis-Generator自动生成Dao.Model.Mapping相关文件(转)
- 13、Java并发性和多线程-Java Volatile关键字
以下内容转自http://tutorials.jenkov.com/java-concurrency/volatile.html(使用谷歌翻译): Java volatile关键字用于将Java变量标 ...
- win7下安装SQLSERVER2000
来自为知笔记(Wiz)
- Visual Assist X破解版安装(vs2010助手)
从网上下载了Visual Assist X 版本号的破解版,安装文件夹为默认的c://program files/Visual Assist X/,当我把破解的VA_X.dll粘贴到该文件夹下,VC+ ...
- 《C# 6.0 本质论》 阅读笔记
<C# 6.0 本质论> 阅读笔记 阅读笔记不是讲述这本书的内容,只是提取了其中一部分我认为比较重要或者还没有掌握的知识,所以如果有错误或者模糊之处,请指正,谢谢! 对于C# 6.0才 ...
- linux查找nginx所在目录
ps -ef |grep nginx