博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1005 矩阵取数游戏
阅读量:4974 次
发布时间:2019-06-12

本文共 2883 字,大约阅读时间需要 9 分钟。

高精度真好van

假的

#include
#include
#include
#include
using namespace std;struct node//高精度结构体{ int len; int base[101]; void fill(int val)//初始化函数,每次写高精度,都感觉自己是一点点凑出来的233 { memset(base,0,sizeof(base)); len=0; if(!val) return ; while(val>=10000) { base[len++]=val%10000; val/=10000;//压一个小位 } len-=1; if(val) base[++len]=val; return ; } node operator + (const node &a)const//普通的加号 { node res; res.fill(0);//普通的调用 res.len=max(len,a.len); for(int i=0;i<=res.len;i++) { res.base[i]+=base[i]+a.base[i]; res.base[i+1]+=res.base[i]/10000; res.base[i]%=10000;//普通的压位 } if(res.base[len+1]) res.len+=1; while(!res.base[res.len]) res.len-=1;//普通且冗杂的调整尾数 if(res.len==-1) res.len=0; return res; } node operator * (const node &a)const { node res; res.fill(0); res.len=len+a.len; for(int i=0;i<=len;i++) for(int j=0;j<=a.len;j++) { res.base[i+j]+=base[i]*a.base[j]; res.base[i+j+1]+=res.base[i+j]/10000; res.base[i+j]%=10000; } if(res.base[res.len+1]) res.len+=1; while(!res.base[res.len]) res.len-=1; if(res.len==-1) res.len=0; return res; }};node max(const node &a,const node &b){ if(a.len!=b.len) return (a.len > b.len ? a : b ); for(int i=a.len;i>=0;i--) if(a.base[i]!=b.base[i]) return (a.base[i] > b.base[i] ? a : b); return a;//比较大小}node twi[81];int base[1010];node dp[90][90];node ans;node pas;node pas1,pas2;int main(){ twi[0].fill(1); twi[1].fill(2); for(int i=2;i<=80;i++) twi[i]=twi[i-1]*twi[1];//预处理2的幂 int n,m; scanf("%d%d",&n,&m); ans.fill(0); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) scanf("%d",&base[j]); pas.fill(base[1]);dp[1][0]=pas*twi[1]; pas.fill(base[m]);dp[0][1]=pas*twi[1]; for(int k=2;k<=m;k++) for(int j=0;j<=k;j++) { pas1.fill(base[m-(k-j)+1]); pas2.fill(base[j]); dp[j][k-j].fill(0); if(k-j-1>=0) dp[j][k-j]=max(dp[j][k-j-1]+pas1*twi[k],dp[j][k-j]); if(j-1>=0) dp[j][k-j]=max(dp[j-1][k-j]+pas2*twi[k],dp[j][k-j]);//简单的dp } pas.fill(0); for(int j=0;j<=m;j++) pas=max(pas,dp[j][m-j]); ans=ans+pas; } printf("%d",ans.base[ans.len]); for(int i=ans.len-1;i>=0;i--) printf("%04d",ans.base[i]);//一定要补位!!! return 0;}

转载于:https://www.cnblogs.com/Lance1ot/p/9140463.html

你可能感兴趣的文章
[转帖] sparkdev 的 博客 systemd
查看>>
[cnbeta] 波音系列飞机价格。。。
查看>>
MSTSC 3389 端口修改
查看>>
Java数据类型的位数
查看>>
旁门左道通过JS与纯CSS实现显示隐藏层
查看>>
HDU 4313 Matrix(并查集)
查看>>
HDU 2546 饭卡(0-1背包)
查看>>
HDU 2426 Interesting Housing Problem(二分图最佳匹配)
查看>>
SpringMVC存取Session的两种方法
查看>>
通俗易懂之Tensorflow summary类 & 初识tensorboard
查看>>
python基础篇12-函数
查看>>
获取APP地图权限
查看>>
java反射机制获得类的私有属性
查看>>
[EntLib]微软企业库5.0 学习之路——第一步、基本入门 [转]
查看>>
[ExtJs6] 环境搭建及创建项目
查看>>
<译>Zookeeper官方文档
查看>>
Android sharedUserId 使用
查看>>
伟大架构师的秘密
查看>>
Select_full_join 与 Select_range_check 与Sort_merge_passes
查看>>
win32可以自定义消息
查看>>