社区讨论
蜜汁WA~~~
P1005[NOIP 2007 提高组] 矩阵取数游戏参与者 5已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mi6iczgp
- 此快照首次捕获于
- 2025/11/20 05:22 4 个月前
- 此快照最后确认于
- 2025/11/20 05:22 4 个月前
改了几天了,还是没改出来,5555~~~~~
求dalao改错。。。。
CPP#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define For(i , j , k) for (register int i = (j) , _##end_ = (k) ; i <= _##end_ ; ++ i)
#define Fordown(i , j , k) for (register int i = (j) , _##end_ = (k) ; i >= _##end_ ; -- i)
#define Set(a , b) memset(a , b , sizeof(a))
#define pb push_back
#define Mod (1000000007)
#define INF (0x3f3f3f3f)
#ifdef hany01
#define debug(...) fprintf(stderr , __VA_ARGS__)
#else
#define debug(...)
#endif
typedef long long LL;
using namespace std;
template <typename T> inline bool chkmax(T &a , const T &b) { return a < b ? a = b , 1: 0; }
template <typename T> inline bool chkmin(T &a , const T &b) { return b < a ? a = b , 1: 0; }
int _ , __;
char c_;
inline int Read()
{
for (_ = 0,__ = 1,c_ = getchar();!isdigit(c_);c_=getchar())if (c_ == '-')__ = -1;
for (;isdigit(c_);c_=getchar())_ = (_ << 1) + (_ << 3) + (c_ ^ 48);
return _ * __;
}
inline void file()
{
#ifdef hany01
freopen("prac.in" , "r" , stdin);
freopen("prac.out" , "w" , stdout);
#endif
}
struct Number
{
short len , a[60];
void clear()
{
len = 0;
Set(a , 0);
}
void inf()
{
len = 50;
For(i , 1 , len)
a[i] = 9;
}
Number X2()
{
Number A = *this;
For(i , 1 , A.len)
A.a[i] = A.a[i] * 2;
For(i , 1 , A.len)
A.a[i + 1] += A.a[i] / 10,
A.a[i] %= 10;
while (A.a[A.len + 1])
++ A.len;
return A;
}
bool operator < (const Number A) const
{
if (len < A.len)
return true;
if (len > A.len)
return false;
Fordown(i , len , 1)
{
if (a[i] < A.a[i])
return true;
if (a[i] > A.a[i])
return false;
}
return false;
}
void print()
{
if (!len)
putchar('0');
else
Fordown(i , len , 1)
printf("%d" , a[i]);
}
}dp[100][100] , Ans , tmp , a[100][100] , Max;
Number operator + (const Number &A , const Number &B)
{
Number C;
C.clear();
C.len = max(A.len , B.len);
For(i , 1 , C.len)
C.a[i + 1] += (A.a[i] + B.a[i]) / 10,
C.a[i] += (A.a[i] + B.a[i]) % 10;
while (C.a[C.len + 1])
++ C.len;
return C;
}
Number Turn(int t)
{
Number A;
A.clear();
if (!t)
return A;
while (t)
{
A.a[++ A.len] = t % 10;
t /= 10;
}
return A;
}
int n , m;
int main()
{
file();
n = Read();
m = Read();
Ans.clear();
For(T , 1 , n)
{
For(i , 1 , m)
{
a[i][1] = Turn(Read()).X2();
For(j , 2 , m)
a[i][j] = a[i][j - 1].X2();
}
dp[1][m].clear();
Fordown(len , m - 1 , 1)
{
For(i , 1 , m - len + 1)
{
int j = i + len - 1;
dp[i][j].clear();
if (i > 1)
chkmax(dp[i][j] , dp[i - 1][j] + a[i - 1][m - len]);
if (j < m)
chkmax(dp[i][j] , dp[i][j + 1] + a[j + 1][m - len]);
}
}
Max.clear();
For(j , 1 , m)
chkmax(Max , dp[j][j] + a[j][m]);
Ans = Ans + Max;
}
Ans.print();
putchar('\n');
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...