[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. ...
随机推荐
- Git 将本地库添加到远程仓库
git remote add origin ssh://admin@127.0.0.1:29418/Prjs/prj1.git git push -u origin master
- |ERROR|ERROR: missing data for column "createtime" (seg3 slice1 192.168.66.23:40001 pid=33370)之mysql换行符或者空格引起的问题
1.最近的kettle的数据交换配置,启动kettle引起的错误,如下所示: |ERROR|ERROR: missing data pid=) 引发这个错误,并不是这个字段引起的错误,一般是这个字段临 ...
- curl请求https请求
function curl_https($url,$data){ $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $url ); curl_se ...
- CDOJ 1960 构造哈密顿路径
题意: 给定n个点的有向完全图,希望通过其中n-1条边将n个点串起来(2<=n<=1000) 欧拉路径:经过所有边且只经过一次 哈密顿路径:经过所有点且只经过一次 思路: 本题条件特殊,有 ...
- maven安装和eclipse集成
maven作为一个项目构建工具,在开发的过程中很受欢迎,可以帮助管理项目中的bao依赖问题,另外它的很多功能都极大的减少了开发的难度,下面来介绍maven的安装及与eclipse的集成. maven的 ...
- python安装plinter
我下的python2.7是有pip的,但是直接在cmd中输入pip是无响应的.要去环境变量中配置D:/python/Script 这样就可以了. pip install splinter就能下载了
- bzoj 松鼠的新家
哈夫曼距离与切比雪夫距离的转化
- Python_set集合部分功能介绍
set:无序集合,不能出现重复的元素 set的创建:s1=set() #访问速度快 #解决重复问题 x.add():添加一个新的元素,添加的重复的元素自动过滤掉 x.clear():清空集合 x.di ...
- net core体系-API-1Ocelot-(1)概要
从这篇开始探讨Ocelot,Ocelot是一个.NET API网关,仅适用于.NET Core,用于.NET面向微服务/服务的架构中.当客户端(web站点.ios. app 等)访问web api时, ...
- Loadbalancer
LoadBalancer 可以将来自客户端的请求分发到不同的服务器,通过将一系列的请求转发到不同的服务器可以提高服务器的性能,并可以自动地寻找最优的服务器转发请求,这样不仅提高了系统性能,同时达到了负 ...