这是提高组得一道动态规划题,也是学习y氏思考法的第一道题。

题意为给定一个矩阵,里面存有一些数,你从左上角开始走到右下角,另一个人从右下角开始走到左上角,使得两个人取数之和最大,当然一个数只可以取走一次并且行走规则与采花生一样。开始之前我们把问题进行一下转化,把右下角的人拿到左上角来,也让其往下走。然后我们开始思考1.集合?从(1,1,1,1)到(i,j,i2,j2)的所有路线中的答案;2.属性?最大值 3.集合计算与划分?根据最后原则,除了左上角dp[i,j,i2,j2]是由上上,左左,左上,上左加上本身的数,四种状态转移过来的,以此得出状态转移方程。那么还有一点我们需要注意,就是我们不可以同时走两个点,所以当i1=i2时,我们只需要加上mp[i1][k-i1]的值就好4.优化?我们只需要保持步数一样,那么i1,i2,k就可以表示出j1,j2了(k-i1)。

代码

#include<bits/stdc++.h>
using namespace std;
int dp[][][];
int n,m;
int mp[][];
int main(){
cin>>n;
int a,b,c;
memset(mp,,sizeof(mp));
while(cin>>a>>b>>c){
mp[a][b]=c;
}
for(int k=;k<=*n;k++){
for(int i1=;i1<=n;i1++){
for(int i2=;i2<=n;i2++){
int j1=k-i1;
int j2=k-i2;
if(j1>=&&j2>=&&j2<=n&&j1<=n){
int t=mp[i1][j1];
if(i1!=i2) t+=mp[i2][j2];
dp[k][i1][i2]=max(dp[k-][i1-][i2-]+t,dp[k][i1][i2]);//dd
dp[k][i1][i2]=max(dp[k-][i1-][i2]+t,dp[k][i1][i2]);//dr
dp[k][i1][i2]=max(dp[k-][i1][i2-]+t,dp[k][i1][i2]);//rd
dp[k][i1][i2]=max(dp[k-][i1][i2]+t,dp[k][i1][i2]);//rr
}
}
}
}
cout<<dp[*n][n][n];
return ;
}

最新文章

  1. cannot determine the location of the vs common tools folder
  2. Odoo10尝鲜:出勤登记
  3. vijos 1006 spfa **
  4. 数的n次方 s.match(reg) marquee滚动效果
  5. sed awk 要获得每行的最后一个逗号后边的内容
  6. 关于Zend Framework 2中 Zend\Session的使用
  7. 保存iptables的防火墙规则的方法【转载】
  8. vue双向绑定的原理及实现双向绑定MVVM源码分析
  9. nginx的自动化安装和启停脚本
  10. [六] 函数式接口的复合方法示例 predicate 谓词逻辑运算 Function接口 组合运算 比较器 逆序 比较链
  11. MySQL主从复制故障1595报错【原创】
  12. springmvc接收数组方式总结
  13. ES6中Promise的入门(结合例子)
  14. canvas基础之变换
  15. LUOGU3278 [SCOI2013]多项式的运算
  16. React package.json详解
  17. IT 运行在云端,而云运行在 Linux 上
  18. web端常见兼容性问题整理
  19. Breaking Good
  20. 昂贵的聘礼 - poj 1062 (Dijkstra+枚举)

热门文章

  1. 学习andriod开发之 异步加载图片(二)--- 使用其他进度条
  2. BZOJ 4388 [JOI2012春季合宿]Invitation (线段树、二叉堆、最小生成树)
  3. Centos 7 下安装LDAP 双主同步
  4. tp5最强分页 自定义model,控制器引用。只显示一页
  5. T89359 扫雷
  6. ROC和AUC————摘在网络
  7. 给JAVA的eclipse IDE 在线安装 SVN插件 / 给 eclipse 添加打开所在的文件夹功能
  8. 2-mybatis-启动
  9. Struts 简单UI标签
  10. linux系统安装zint