hlg2144两只猴子【dp】

两只猴子分别从果园的不同起点出发,一只只能向下或向右移动,另一只只能向上或向右移动,目标是在避开妖怪的同时尽可能多地采摘水果。通过动态规划算法计算两只猴子能够采摘的最大水果数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两只猴子
Time Limit: 1500 MSMemory Limit: 32768 K
Total Submit: 2(2 users)Total Accepted: 2(2 users)Rating: Special Judge: No
Description

两只猴子被猴王派去摘水果。

当这两只猴子到果园时,发现混世魔王带着一群妖怪杀了过来。于是,两只猴子打算分开行动,这样既可以逃走,又可以多采水果。

把果园看成n*m矩形,一只猴子从(1,1)出发,它只能向下或向右走;另一只从(n,1)出发,它只能向上或向右走。

由于妖怪们都很严格的执行混世魔王的命令,当它被派去追一只猴子时它不会去追另一只猴子。汗!

它们最多可以带多少水果会去呢?

注:它们有一种可以储存很多东西的法宝。它们走过的地方水果都会被采走。

Input

第一行:整数n ,m  (3<=n,m<=500)

接下来 输入n行 每行m个整数a[i][j] 表示水果的量(0<=a[i][j]<=10) 

Output

最多可带多少水果。

Sample Input

3 3

100 100 100

100 1 100

100 100 100

4 3

1 3 1

1 1 1

1 3 3

2 3 4

3 4

1 2 2 2

2 2 3 2

1 1 1 1

Sample Output

801

23

19

 

这个题描述有问题……

这个题原意是给你一个矩阵从左上角到右下角一只猴子走  从左下角到右上角一只猴子走  问能带走多上

 

一次枚举每个点作为焦点然后dp来求就可以了

 

代码:

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 using namespace std;
  5 
  6 #define sc scanf
  7 #define pr printf
  8 #define re return
  9 #define me(a, b) memset(a, b, sizeof(a));
 10 #define fr(i, j, k) for(int i = j; i <= k; i++)
 11 
 12 const int maxn = 505;
 13 
 14 int a[maxn][maxn];
 15 int dp[5][maxn][maxn];
 16 
 17 int main() {
 18     int n, m;
 19     while(EOF != sc("%d %d",&n, &m) ) {
 20         fr(i, 1, n) {
 21             fr(j, 1, m) {
 22                 sc("%d",&a[i][j]);
 23             }
 24         }
 25         me(dp, 0);
 26         dp[1][1][1] = a[1][1];
 27         fr(i, 1, n) {
 28             fr(j, 1, m) {
 29                 if(i == 1 && j == 1) continue;
 30                 if(i == 1) {
 31                     dp[1][i][j] = dp[1][i][j - 1] + a[i][j];
 32                     continue;
 33                 }
 34                 if(j == 1) {
 35                     dp[1][i][j] = dp[1][i - 1][j] + a[i][j];
 36                     continue;
 37                 }
 38                 dp[1][i][j] = max(dp[1][i][j], dp[1][i - 1][j] + a[i][j]);
 39                 dp[1][i][j] = max(dp[1][i][j], dp[1][i][j - 1] + a[i][j]);
 40             }
 41         }
 42 
 43         dp[2][n][1] = a[n][1];
 44         for(int i = n; i >= 1; i--) {
 45             for(int j = 1;j <= m; j++) {
 46                 if(i == n && j == 1) continue;
 47                 if(i == n) {
 48                     dp[2][i][j] = dp[2][i][j - 1] + a[i][j];
 49                     continue;
 50                 }
 51                 if(j == 1) {
 52                     dp[2][i][j] = dp[2][i + 1][j] + a[i][j];
 53                     continue;
 54                 }
 55                 dp[2][i][j] = max(dp[2][i][j], dp[2][i][j - 1] + a[i][j]);
 56                 dp[2][i][j] = max(dp[2][i][j], dp[2][i + 1][j] + a[i][j]);
 57 
 58             }
 59         }
 60 
 61         dp[3][1][m] = a[1][m];
 62         fr(i, 1, n) {
 63             for(int j = m; j >= 1; j--) {
 64                 if(i == 1 && j == m) continue;
 65                 if(i == 1) {
 66                     dp[3][i][j] = dp[3][i][j + 1] + a[i][j];
 67                     continue;
 68                 }
 69                 if(j == m) {
 70                     dp[3][i][j] = dp[3][i - 1][j] + a[i][j];
 71                     continue;
 72                 }
 73                 dp[3][i][j] = max(dp[3][i][j], dp[3][i][j + 1] + a[i][j]);
 74                 dp[3][i][j] = max(dp[3][i][j], dp[3][i - 1][j] + a[i][j]);
 75 
 76             }
 77         }
 78 
 79         dp[4][n][m] = a[n][m];
 80         for(int i = n; i >= 1; i--) {
 81             for(int j = m; j >= 1; j--) {
 82                 if(i == n && j == m) continue;
 83                 if(i == n) {
 84                     dp[4][i][j] = dp[4][i][j + 1] + a[i][j];
 85                     continue;
 86                 }
 87                 if(j == m) {
 88                     dp[4][i][j] = dp[4][i + 1][j] + a[i][j];
 89                     continue;
 90                 }
 91                 dp[4][i][j] = max(dp[4][i][j], dp[4][i][j + 1] + a[i][j]);
 92                 dp[4][i][j] = max(dp[4][i][j], dp[4][i + 1][j] + a[i][j]);
 93 
 94             }
 95         }
 96         int ans = 0;
 97         for(int i = 2; i < n; i++) {
 98             for(int j = 2; j < m; j++) {
 99                 ans = max(ans, dp[1][i][j - 1] + dp[2][i + 1][j] + dp[3][i -1][j] + dp[4][i][j + 1] + a[i][j]);
100                 ans = max(ans, dp[2][i][j - 1] + dp[4][i + 1][j] + dp[1][i -1][j] + dp[3][i][j + 1] + a[i][j]);
101             }
102         }
103         pr("%d\n",ans);
104     }
105     return 0;
106 }
View Code

 

YUV颜色空间与HLG(Hybrid Log-Gamma)高动态范围技术在视频处理中具有一定的协同作用。YUV是一种将图像或视频信号分解为亮度(Y)和色度(U、V)分量的颜色空间。这种分离有助于在传输和压缩过程中优化亮度和色度信息的处理,因为人眼对亮度变化的敏感度高于对色度变化的敏感度。因此,YUV格式被广泛应用于视频编码和广播系统中,如H.264、HEVC等标准[^1]。 HLG是一种高动态范围(HDR)技术,旨在提供更宽的亮度范围,从而增强图像的对比度和细节表现力。与传统的SDR(Standard Dynamic Range)相比,HLG能够呈现更真实的亮部和暗部细节,使图像看起来更加生动和自然。HLG技术通过使用一种特殊的伽玛曲线(Log-Gamma),能够在不增加额外元数据的情况下实现HDR效果,这使得它特别适合于实时广播和视频传输[^2]。 在实际应用中,YUV颜色空间与HLG技术可以结合使用以提高视频的质量。例如,在HDR视频编码过程中,视频信号通常首先被转换为YUV颜色空间,其中亮度分量(Y)可以应用HLG技术来扩展动态范围,而色度分量(U、V)则可以根据需要进行适当的处理和压缩。这种方法不仅能够保持视频的高质量,还能有效地减少数据传输所需的带宽[^1]。 此外,由于HLG技术不需要额外的元数据,它与现有的视频传输和接收设备兼容性更好。这意味着,在使用YUV颜色空间进行视频处理时,通过引入HLG技术,可以在不显著改变现有基础设施的情况下实现HDR视频的制作和播放。 综上所述,YUV颜色空间与HLG技术在视频处理中的结合,不仅能够提升视频的视觉效果,还能够适应当前视频传输和接收设备的要求,为用户提供更加优质的观看体验。 ```python # 示例代码:假设我们有一个函数用于转换视频信号到YUV颜色空间并应用HLG技术 def convert_to_YUV_and_apply_HLG(video_signal): # 转换视频信号到YUV颜色空间 yuv_video = convert_to_YUV(video_signal) # 应用HLG技术到亮度分量 hlg_yuv_video = apply_HLG(yuv_video['Y']) # 合并处理后的亮度分量与未处理的色度分量 final_video = merge_YUV(hlg_yuv_video, yuv_video['U'], yuv_video['V']) return final_video # 假设的转换函数 def convert_to_YUV(signal): # 实现RGB到YUV转换逻辑 pass # 假设的应用HLG函数 def apply_HLG(y_component): # 实现HLG技术到亮度分量 pass # 假设的合并YUV分量函数 def merge_YUV(y, u, v): # 合并YUV分量形成最终视频 pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值