[P1005][NOIP2007] 矩阵取数游戏 (DP+高精)
我不会高精……
也不会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+高精)的更多相关文章
- [LuoguP1005]矩阵取数游戏 (DP+高精度)
题面 传送门:https://www.luogu.org/problemnew/show/P1005 Solution 我们可以先考虑贪心 我们每一次都选左右两边尽可能小的数,方便大的放在后面 听起来 ...
- NOIP2007 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 【洛谷P1005】矩阵取数游戏
矩阵取数游戏 题目链接 每行分别跑一趟区间DP即可 这道题区间DP是非常裸的,按套路来即可 但是很毒瘤的是需要高精度, “我王境泽就是爆零,从这跳下去,也不会用__int128的!” #include ...
- NOIP2007 矩阵取数游戏(区间DP)
传送门 这道题第一眼看上去可能让人以为是贪心……不过贪心并不行,因为每次的操作是有2的幂次方的权值的.这样的话直接每次贪心最小的就目光短浅.所以那我们自然想到了DP. 据说这是一道很正常的区间DP? ...
- [NOIP2007] 提高组 洛谷P1005 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- P1005 矩阵取数游戏 区间dp 高精度
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...
- 矩阵取数游戏 2007年NOIP全国联赛提高组(dp+高精)
矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description [问题描述]帅帅经常跟 ...
- P1005 矩阵取数游戏[区间dp]
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(m*n\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后 ...
- NOIP2007矩阵取数[DP|高精度]
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
随机推荐
- Android.os.SystemClock
https://www.linuxidc.com/Linux/2011-11/48325p2.htm 文档中对System.currentTimeMillis()进行了相应的描述,就是说它不适合用在需 ...
- SQL Server中Text和varchar(max) 区别
SQL Server 2005之后版本:请使用 varchar(max).nvarchar(max) 和 varbinary(max) 数据类型,而不要使用 text.ntext 和 image 数据 ...
- 如何下载kubenetes最新的rpm包?
一,新增aliyun的软件仓库 tee /etc/yum.repos.d/kubernetes.repo <<-'EOF' [kubernetes] name=Kubernetes bas ...
- 常用js正则表达式大全
常用js正则表达式大全.一.校验数字的js正则表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和 ...
- Nginx配置项优
1.nginx运行工作进程个数,一般设置cpu的核数或者核心数x2 如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件. [root@localhost~] ...
- 利用MySQL统计一列中不同值的数量方法示例
前言 本文实现的这个需求其实十分普遍,举例来说,我们存在一个用户来源表,用来标记用户从哪个渠道注册进来.表结构如下所示… 其中 origin 是用户来源,其中的值有 iPhone .Android . ...
- lvs-nat 实验
1 ipvsadm集群服务管理工具使用 安装ipvsadm: yum install ipvsadm 参数: Ipvsadm -h : 获取帮助 -A 创建一个新的集群服务 -E 修 ...
- Python 面向对象5 多态
一.多态 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作,简单的说就是一句话:允许将 ...
- HDU6031 Innumerable Ancestors 倍增 - 题意详细概括 - 算法详解
去博客园看该题解 题目 查看原题 - HDU6031 Innumerable Ancestors 题目描述 有一棵有n个节点的有根树,根节点为1,其深度为1,现在有m个询问,每次询问给出两个集合A和B ...
- java生成Excel文件,下载
pom引入poi的maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId> ...