[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. ...
随机推荐
- asp.net core 验证码方案
/// <summary> /// 图片验证码 /// </summary> public class VerificationCodeServices { /// <s ...
- 步步为营-94-GridView中的DropDownlist值得获取与绑定
bug场景: 例如这种"计税方式"是下拉列表的,当选择"编辑"时候,数据会丢失 修改方式,前台对应修改 后台代码在databound时候给绑定值 测试效果
- Lua中assert( )函数的使用
当Lua遇到不期望的情况时就会抛出错误,比如:两个非数字进行相加:调用一个非函数的变量:访问表中不存在的值等.你也可以通过调用error函数显示的抛出错误,error的参数是要抛出的错误信息. ass ...
- Python推荐系统库--Surprise理论
Surprise Surprise是scikit系列中的一个.Surprise的User Guide有详细的解释和说明 支持多种推荐算法 基础算法/baseline algorithms 基于近邻方法 ...
- python指定分隔符来分割文件
1 import re 2 p = re.compile('AAAAAAAA',re.S) 3 f = open(r"D:\test\oldfile.txt","r&qu ...
- RPC服务超时排查思路
RPC服务超时排查思路- 1.查看服务提供者日志相关信息进行排查- 2.查看消费者的超时时间设置是否合理- 3.查看服务提供者业务逻辑是否有DB操作,有的话看是否有慢SQL- 4.查看服务提供者业务逻 ...
- [转] 跨域资源共享 CORS 详解
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从 ...
- HDU 1384 Intervals【差分约束-SPFA】
类型:给出一些形如a−b<=k的不等式(或a−b>=k或a−b<k或a−b>k等),问是否有解[是否有负环]或求差的极值[最短/长路径].例子:b−a<=k1,c−b&l ...
- python之string模块常量:数字,26个字母,标点符号,空白
In [8]: import string In [9]: dir(string) In [10]: string.ascii_letters Out[10]: 'abcdefghijklmnopqr ...
- 支付宝 app支付 沙盘使用
文档说明 沙箱测试: App支付沙箱接入注意点 1.app支付支持沙箱接入:在沙箱调通接口后,必须在线上进行测试与验收,所有返回码及业务逻辑以线上为准:2.app支付只支持余额支付,不支持银行卡.余额 ...