[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. ...
随机推荐
- python练习册0004题
在任意一个英文文档中,统计单词出现的次数, 分析: 本题不是很难,单词通常以空格隔开,但是有些单词后面跟一些特殊符号,只需把这些特殊符号替换掉就可以了, 代码一 import re file_name ...
- K/3 Cloud Web API接口说明文
K/3 Cloud Web API接口说明文 目的 三方集成,提供第三方系统与Cloud集成调用接口. 技术实现 HTTP + Json 提供标准接口 编号 名称 说明 1 Kingdee.BOS.W ...
- 使用newtonjson解决Json日期格式问题
继承 JsonResult 方式 使用Json.Net代替最简单的方法就是使用下面的JsonNetResult 来作为 ActionResult 返回. 1) Install-Package newt ...
- springcloud feign传输List的坑
无法直接传输List 错误方法1: @RequestMapping(value = "/stat/merchant/get_merchant_compare_info", meth ...
- openresty用naxsi防xss、SQL注入
下载naxsi wget https://github.com/nbs-system/naxsi/archive/untagged-afabfc163946baa8036f.tar.gz tar zx ...
- 计算1至n中数字X出现的次数【math】
转自: nailperry 一.1的数目 编程之美上给出的规律: 1. 如果第i位(自右至左,从1开始标号)上的数字为0,则第i位可能出现1的次数由更高位决定(若没有高位,视高位为0),等于更高位数字 ...
- 清北合肥day1
题目: 1.给出一个由0,1组成的环 求最少多少次交换(任意两个位置)使得0,1靠在一起 n<=1000 2.两个数列,支持在第一个数列上区间+1,-1 每次花费为1 求a变成b的最小代价 n& ...
- nginx 限制并发访问及请求频率
0. 1.参考 [工作]Nginx限制IP并发连接数和请求数的研究 Module ngx_http_limit_conn_module Module ngx_http_limit_req_module ...
- linux服务器查看tcp链接shell
netstat -nt |awk '{++S[$NF]} END {for (a in S ) print a,S[a]}'
- 045 Java中数据导入到excel
程序有些参考,不过重要的是思路. 1.导入依赖 <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.p ...