我不会高精……

也不会DP……

这道题即考高精又考DP……

我要死了

给一个不是高精的代码(当然不能满分)

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=+;
const int maxl=;
int n,m;
int a[maxn],f[maxn][maxn],aa[maxn],bb[maxn],ans[maxn];
int main()
{
int ans=;
cin>>n>>m;
for (int i=;i<=n;i++)
{
for(int j=;j<=m;j++) scanf("%d",&a[j]);
for(int j=;j<=m;j++) f[j][j]=a[j];
for(int j=;j<=m-;j++)
{
for(int k=;k<=m-j;k++)
{
int l=k+j;
f[k][l] = max(a[k]+*f[k+][l],a[l]+*f[k][l-]);
}
}
ans+=*f[][m];
}
cout<<ans<<endl;
return ;
}

然后这个是AC代码

#include<stdio.h>
typedef long long ll;
ll MAX=;
struct bignum{ll p1,p2;};
bignum operator+(const bignum a,const bignum b){
bignum c;
c.p1=a.p1+b.p1;
c.p2=a.p2+b.p2;
if(c.p2>=MAX){
c.p2-=MAX;
c.p1++;
}
return c;
}
int operator<(const bignum a,const bignum b){
if(a.p1<b.p1)return ;
if(a.p1>b.p1)return ;
if(a.p2<b.p2)return ;
return ;
}
bignum pow2(int x){
bignum a;
a.p1=;
a.p2=;
while(x--)a=a+a;
return a;
}
bignum operator*(const bignum a,const int b){
bignum c;
c.p1=a.p1*b;
c.p2=a.p2*b;
if(c.p2>=MAX){
c.p1+=c.p2/MAX;
c.p2%=MAX;
}
return c;
}
void write(const bignum a){
if(a.p1)printf("%lld%015lld",a.p1,a.p2);
else printf("%lld",a.p2);
}
bignum max(const bignum a,const bignum b){
return a<b?b:a;
}
int main(){
int a[],i,j,n,m;
bignum score,f[][];
score.p1=;
score.p2=;
scanf("%d%d",&n,&m);
while(n--){
for(i=;i<=m;i++){
scanf("%d",&a[i]);
f[i][i]=pow2(m)*a[i];
}
for(j=;j<m;j++)
for(i=;i<=m-j;i++)
f[i][i+j]=max(f[i+][i+j]+pow2(m-j)*a[i],f[i][i+j-]+pow2(m-j)*a[i+j]);
score=score+f[][m];
}
write(score);
}

我实在是太菜了

只是为了过试炼场才去打恶心题的

最近发现了一个新的黑科技

__int128 貌似不用高精也可以过 而且速度也快

恶心啊,我一定要学__int128

#include<bits/stdc++.h>
#define in(x) x=read()
#define MAXN 81
#define k m-(R-L)
#define bll __int128 using namespace std; inline int read()
{
int X=,w=;
char ch=getchar();
while(ch<'' || ch>'') {if(ch=='-') w=-;ch=getchar();}
while(ch>='' && ch<='') X=(X<<)+(X<<)+ch-'',ch=getchar();
return X*w;
} int n,m;
int num[MAXN];
bll ans,p[MAXN],f[MAXN][MAXN]; bll dp(int L,int R)//记忆化搜索
{
if(f[L][R]!=-) return f[L][R];
if(R-L>=) f[L][R]=max(num[L]*p[k]+dp(L+,R),dp(L,R-)+num[R]*p[k]);
else f[L][R]=num[L]*p[k];
return f[L][R];
} void print(bll x)
{
if(!x) return;
if(x) print(x/);
putchar(x%+'');
} int main()
{
in(n);in(m);
p[]=;
for(int i=;i<=m;i++) p[i]=p[i-]*;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++) in(num[j]);
memset(f,-,sizeof(f));
ans+=dp(,m);
}
if(!ans) printf("");
else print(ans);
return ;
}

[P1005][NOIP2007] 矩阵取数游戏 (DP+高精)的更多相关文章

  1. [LuoguP1005]矩阵取数游戏 (DP+高精度)

    题面 传送门:https://www.luogu.org/problemnew/show/P1005 Solution 我们可以先考虑贪心 我们每一次都选左右两边尽可能小的数,方便大的放在后面 听起来 ...

  2. NOIP2007 矩阵取数游戏

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

  3. 【洛谷P1005】矩阵取数游戏

    矩阵取数游戏 题目链接 每行分别跑一趟区间DP即可 这道题区间DP是非常裸的,按套路来即可 但是很毒瘤的是需要高精度, “我王境泽就是爆零,从这跳下去,也不会用__int128的!” #include ...

  4. NOIP2007 矩阵取数游戏(区间DP)

    传送门 这道题第一眼看上去可能让人以为是贪心……不过贪心并不行,因为每次的操作是有2的幂次方的权值的.这样的话直接每次贪心最小的就目光短浅.所以那我们自然想到了DP. 据说这是一道很正常的区间DP? ...

  5. [NOIP2007] 提高组 洛谷P1005 矩阵取数游戏

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

  6. P1005 矩阵取数游戏 区间dp 高精度

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j​均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...

  7. 矩阵取数游戏 2007年NOIP全国联赛提高组(dp+高精)

    矩阵取数游戏 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description [问题描述]帅帅经常跟 ...

  8. P1005 矩阵取数游戏[区间dp]

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(m*n\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后 ...

  9. NOIP2007矩阵取数[DP|高精度]

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

随机推荐

  1. 51 nod 1181 质数中的质数(质数筛法)

    1181 质数中的质数(质数筛法) 如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数.例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数.现在给出一个数N,求>=N的 ...

  2. 20165206 2017-2018-2 《Java程序设计》第五周学习总结

    20165206 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 内部类:支持在一个类中定义另一个类的类. 外嵌类:包含内部类的类,称为内部类的外嵌类. 匿名 ...

  3. Python推荐系统库--Surprise理论

    Surprise Surprise是scikit系列中的一个.Surprise的User Guide有详细的解释和说明 支持多种推荐算法 基础算法/baseline algorithms 基于近邻方法 ...

  4. SHELL打印两个日期之间的日期

    SHELL打印两个日期之间的日期 [root@umout shell]# cat date_to_date.sh THIS_PATH=$(cd `dirname $0`;) cd $THIS_PATH ...

  5. Https双向认证Android客户端配置

    Https .cer证书转换为BKS证书 公式https://blog.csdn.net/zww986736788/article/details/81708967 keytool -importce ...

  6. Windows10上强制Visual Studio以管理员身份运行

    解决办法很简单: 1. 打开VS的安装目录,找到devenv.exe,右键,选择“兼容性疑难解答”. 2. 选择“疑难解答程序” 3. 选择“该程序需要附加权限” 4. 确认用户帐户控制后,点击测试程 ...

  7. SPOJ 1812 LCS2

    题解: 和上一题差不多 每个点记录前面的到这个点的最大值 初值赋为len[i] 然后注意要用子节点更新父节点 代码: #include <bits/stdc++.h> #define ll ...

  8. noip2012

    题解: 闲着无聊做了一遍noip2012 我觉得出题出的好奇怪啊... 为什么两道倍增两道二分答案??? 两天第一题: 第一天第一题傻逼普及组题没什么好说的了 第二天第一题你会扩欧就秒了 两天第二题: ...

  9. Hadoop Avro支持多输入AvroMultipleInputs

    Avro 提供了1.x版本的AvroMultipleInputs,但是不支持2.x API版本,因此修改对应代码,增加对hadoop 2.x API版本的的支持 代码放在https://github. ...

  10. 【Android】Android WebView 网页输入框获取焦点

    webView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEv ...