博客
关于我
洛谷P1004方格取数(四维DP)
阅读量:252 次
发布时间:2019-03-01

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

链接:

同类题:

题意:给一个n*n矩阵(1<=n<=9)。从(1,1)到(n,n)走两次,第一次走过的方格处的值全变为0.求两条路径经过的所有值的和的最大值为多少。

思路:首先看见这一题,感觉并不是一眼能看懂的那种题。做惯了简单题,就不想思考了。为了改变这种坏习惯,我决定还是想一下这一题。最后想到的思路就是,第一次取路径最大值,然后再回溯回去,路径上的值全部赋0,再求一遍最大值。

写代码。。。过样例。。。提交。。。竟然还得了80分,只能说这个数据太水了,我都没打算能得多少分。

然后还是看了题解(真不知道应该什么时候看题解什么时候不看题解)。原来是思维数组(emmm,没涉及过)。看过思路之后,直接写代码,过了。方法还是挺简单的,但是没做过这种题,想不到。

四维DP模板题??dp[i][j][k][t]表示第一个人走(i,j)路径,第二个人走(k,t)路径,然后dp[i][j][k][t]=max(dp[i-1][j][k-1][t],dp[i-1][j][k][t-1],dp[i][j-1][k-1][t],dp[i][j-1][k][t-1])+mp[i][j]+mp[k][t];//注意i=k,j=t时减一个mp[i][j]。

最后贴代码:

#include 
#define ll long long#define ld long double#define pi acos(-1)#define pb push_back#define mst(a, i) memset(a, i, sizeof(a))#define pii pair
#define pll pair
#define fi first#define se second#define dbg(x) cout << #x << "===" << x << endl#define dbgg(i, x) cout << #x << "[" << i << "]===" << x[i] << endlusing namespace std;template
void read(T &x){T res=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){res=(res<<3)+(res<<1)+c-'0';c=getchar();}x=res*f;}void print(ll x){if(x<0){putchar('-');x=-x;}if(x>9)print(x/10);putchar(x%10+'0');}const ll maxn = 1 + 10;const ll mod = 1e9 + 7;ll n,mp[maxn][maxn];ll x,y,k;ll dp[maxn][maxn][maxn][maxn];ll gcd(ll a,ll b){return (b==0)?a:gcd(b,a%b);}ll qpow(ll a,ll p,ll mod){ll ans=1;a=a%mod;while(p){if(p&1)ans=(ans*a)%mod;p>>=1;a=(a*a)%mod;}return ans;}ll ksm(ll a,ll b){ll ret=1; while(b){if(b&1)ret=ret*a%mod;a=a*a%mod;b>>=1;} return ret;}int main() { int T = 1; // read(T); while (T--) { read(n); while(scanf("%lld%lld%lld",&x,&y,&k)!=EOF){ if(x==0&&y==0&&k==0) break; mp[x][y]=k; } for(ll i=1;i<=n;i++){ for(ll j=1;j<=n;j++){ for(ll k=1;k<=n;k++){ for(ll t=1;t<=n;t++){ dp[i][j][k][t]=max(max(dp[i-1][j][k-1][t],dp[i-1][j][k][t-1]),max(dp[i][j-1][k-1][t],dp[i][j-1][k][t-1]))+mp[i][j]+mp[k][t]; if(i==k&&j==t) dp[i][j][k][t]-=mp[i][j]; } } } } cout<
<

 

转载地址:http://ihst.baihongyu.com/

你可能感兴趣的文章
mabatis 中出现&lt; 以及&gt; 代表什么意思?
查看>>
Mac book pro打开docker出现The data couldn’t be read because it is missing
查看>>
MAC M1大数据0-1成神篇-25 hadoop高可用搭建
查看>>
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>