原题

今天举办程序设计比赛,2点30分开始,然而你睡到了2点25分,紧张的你将头发梳成大人模样,敷上一层最贵的面膜,穿着滑板鞋,以飞一般的速度奔向计算机学院准备参加程序设计竞赛!冠军是你的!

然而路上稍不留神,你不小心掉进了一个大粪坑,大粪坑是一个N*N的方格矩阵,每个方格存在着X坨粪,一开始你处在A[1,1]的粪坑位,你可以选择向下移动或者向右移动,目标是逃离大粪坑到达A[N,N]。

此外!!敲重点!!每经过一个粪坑,你会触及粪量X(粗俗的说法叫做吃屎),而且每更改一次方向,传说中的粪皇会向你丢粪!!

粪皇是个学过二进制的优雅美男子,所以他丢粪也是相当的儒雅随和。第一次他会向你丢1坨,第二次他会向你丢2坨哦,第三次他会向你丢4坨哦!第四次他会向你丢8坨哦!第五次他会向你丢16坨哦!....,第N次他会向你丢2^(N-1)坨哦!嘤嘤嘤~~~~~~~

机智的你绝不会向粪皇低头!所以你拿起手中的笔记本,打开Codeblocks,写下#include<bits/stdc++.h>,开始计算如何掉最少的发,吃最少的屎,冲出粪坑,到达计院,拿下冠军!

输入

第一行是一个整数T,代表测试数据个数。

对每个测试数据第一行是一个整数N,代表粪坑大小为N*N (1 ≤ N ≤ 100) 。

接下来N行每行N个整数,代表粪坑矩阵A中每个粪坑位的粪量(1 ≤ Aij ≤ 100)。

输出

最少吃屎量

样例输入

1
3
1 4 6
1 1 3
6 1 1

样例输出

10

题解

#include <bits/stdc++.h>
#define min3(x, y, z) min(x, min(y, z))
using namespace std;
int mp[110][110];
int dp[110][110][2][20]; //x, y, 0left 1up, k次
int main() {
int n, T;
scanf("%d", &T);
while(T--) {
memset(mp, 0, sizeof(mp));
memset(dp, 0x3f3f3f3f, sizeof(dp));
scanf("%d", &n);
for(int i = 1; i <= n; ++ i) {
for(int j = 1; j <= n; ++ j) {
scanf("%d", &mp[i][j]);
}
}
dp[1][1][0][0] = dp[1][1][1][0] = mp[1][1];
for(int i = 2; i <= n; ++ i) {
dp[1][i][0][0] = dp[1][i - 1][0][0] + mp[1][i];
dp[i][1][1][0] = dp[i - 1][1][1][0] + mp[i][1];
}
for(int k = 1; k <= 15; ++ k) {
for(int i = 2; i <= n; ++ i) {
for(int j = 2; j <= n; ++ j) {
if(k >= i || k >= j) continue; //小剪枝。抵达i行最多只能转i - 1次方向,j列同理
dp[i][j][0][k] = min3(dp[i][j][0][k], dp[i][j - 1][0][k] + mp[i][j], dp[i][j - 1][1][k - 1] + (1 << k - 1) + mp[i][j]);
dp[i][j][1][k] = min3(dp[i][j][1][k], dp[i - 1][j][1][k] + mp[i][j], dp[i - 1][j][0][k - 1] + (1 << k - 1) + mp[i][j]);
}
}
}
int ans = 0x3f3f3f3f;
for(int k = 0; k <= 15; ++ k) {
ans = min3(ans, dp[n][n][1][k], dp[n][n][0][k]);
}
cout << ans << endl;
}
}

最新文章

  1. Android自定义ImageView圆形头像
  2. Web 前沿——HTML5 Form Data 对象的使用
  3. 纯CSS下拉导航菜单
  4. SQLSERVER truncate table之后是否会重置表的自增值
  5. 产生不重复的随机数TGUID
  6. springmvc报错 org.springframework.web.servlet.DispatcherServlet
  7. Android下按钮的使用方法
  8. NancyFx 2.0的开源框架的使用-AspnetBootstrapping
  9. vue 自定义指令directive
  10. php header解决跨域问题
  11. 如何将知网下载的caj文件转换为pdf文件
  12. Mybatis_4.接口类和XML同时使用
  13. C#的多样性,new,sealed方法
  14. 关于联想笔记本ThinkPad E470 没有外音 插耳机却有声音的解决办法
  15. 吴恩达机器学习笔记27-样本和直观理解2(Examples and Intuitions II)
  16. matlab练习程序(点集配准的SVD法)
  17. ${pageContext.request.contextPath}的作用【转载】
  18. PHP实现简单倒计时
  19. Android Studio安装配置
  20. C# BackgroundWorker 的使用、封装

热门文章

  1. 应用安全 - CMS - PHPCMS漏洞汇总
  2. [每天一课] 今天就讲一讲关于vue-cli 脚手架里 如何调用API
  3. 【Linux开发】为qt-embedded添加jpeg库的交叉编译方法for arm
  4. 【Qt开发】【Linux开发】QT设置环境变量QWS_DISPLAY
  5. 【Linux开发】【Qt开发】tslibs的配置(触摸屏没有,HDMI屏幕):Qt界面响应USB鼠标
  6. python+selenium切换窗口(获取句柄信息)
  7. 第三次实验报告&amp;&amp;学习总结
  8. Spring对Jdbc的封装——JdbcTemplate的使用
  9. P1118 [USACO06FEB]数字三角形`Backward Digit Su`… (dfs)
  10. [Web 前端] 025 js 的对象、数组和数学对象