当前位置: 首页 > news >正文

洛谷 P2904 [USACO08MAR] River Crossing S 题解

题目链接

洛谷 P2904 [USACO08MAR] River Crossing S

F1:背包 DP

首先观察题目条件。由于需要 \(n\) 头奶牛全部过河,求最小时间,所以可以认为假设有 \(k\) 次过河,第 \(i\) 次过河过 \(a_i\) 头奶牛,那么 \(a_1+a_2+\dots +a_k=n\)。所以可以看成有 \(n\) 件物品,表示本次过河带几头奶牛,如果以奶牛数量为代价,所需时间为价值,则第 \(i\) 件物品代价为 \(i\),价值为 \(2M+M_1+M_2+\dots+M_i\),即过河时间加上一来一回。

所以设 \(dp_j\) 表示 \(j\) 头奶牛过河同时约翰把木筏划回来的最少时间。由于每次带几头奶牛是任意的,所以是完全背包,状态转移方程如下,其中 \(i\) 枚举“物品”,\(j\) 枚举奶牛头数,\(s_i=M_1+M_2+\dots+M_i\),用前缀和求即可。

\[s_i=s_{i-1}+M_i\\ dp_j=\min{(dp_j,dp_{j-i}+s_i+2M)} \]

代码如下,时间复杂度 \(O(n^2)\),具体细节与普通完全背包类似。

#include<bits/stdc++.h>
using namespace std;const int N=2505;
int n,m;
int a[N],s[N],dp[N];int main(){scanf("%d%d",&n,&m);for (int i=1;i<=n;++i) scanf("%d",a+i);for (int i=1;i<=n;++i) s[i]=s[i-1]+a[i];memset(dp,0x3f,sizeof dp);dp[0]=0;for (int i=1;i<=n;++i){for (int j=i;j<=n;++j) dp[j]=min(dp[j],dp[j-i]+s[i]+2*m);}printf("%d",dp[n]-m);return 0;
}

F2:区间 DP

假设原本有 \(x\ (x>1)\) 头奶牛一起过江,那么除了让它们一起过江,还可以把它们分成前 \(y\) 头奶牛,后 \(x-y\) 头奶牛分别过江。假设 \(i\) 头奶牛过江所需最少时间为 \(dp_i\),那么如果不分开,所需时间为 \(dp_x\);如果按上述方案分开过江,就变为 \(dp_y\)\(dp_{x-y}\) 两个子问题,所需时间为分别所需时间 \(dp_y,dp_{x-y}\) 再加上船空载一程所需时间 \(M\)。综上所述,状态转移方程如下,其中 \(i\) 枚举奶牛头数,\(j\) 枚举割点,即前一部分奶牛头数。

\[dp_i=\min{(dp_i,dp_j+dp_{i-j}+M)} \]

初始化即为 \(dp_i=\begin{cases}M&,i=0\\M+M_1+M_2+\dots+M_i=dp_{i-1}+M_i&, i\ge1\end{cases}\),用前缀和求得。代码如下,时间复杂度 \(O(n^2)\)

#include<bits/stdc++.h>
using namespace std;const int N=2505;
int n,m;
int a[N],dp[N];int main(){scanf("%d%d",&n,&m);for (int i=1;i<=n;++i) scanf("%d",a+i);dp[0]=m;for (int i=1;i<=n;++i) dp[i]=dp[i-1]+a[i];for (int i=1;i<=n;++i){for (int j=1;j<i;++j) dp[i]=min(dp[i],dp[j]+dp[i-j]+m);}printf("%d",dp[n]);return 0;
}
http://www.jsqmd.com/news/188549/

相关文章:

  • 二叉树的递归遍历算法(前中后序)
  • 第十节课
  • 基于fpga的czt(chirp-z)算法实现,频谱细化算法,fpga硬件实现,平台vivado
  • zz国内关于大模型的教科书已经至少有三本
  • 基于差分放大电路的PT100电路仿真
  • 导师推荐!2025本科生必用TOP10 AI论文工具测评
  • 详细介绍:【分布式利器:大厂技术】4、字节跳动高性能架构:Kitex+Hertz+BytePS,实时流与AI的极致优化
  • JavaScript异步Callback到Async/Await的进化
  • API设计自动化:接口生成与优化
  • Tenda的U11无线网卡修复记
  • 代码随想录Day53图论4.md
  • 2026年:30年来最好的创业时代
  • xhEditor复制word图片到OA平台
  • 信创环境下SpringBoot大文件上传的适配方案交流
  • vue+uniapp+基于Javaspingboot的微信奶茶点单小程序
  • xhEditor粘贴微信公众号内容到cms
  • vue+uniapp+基于微信小程序的健康管理系统医院挂号预约
  • vue+uniapp+基于企业微信的问卷调查系统的设计与实现_小程序6257e394--论文
  • 强烈安利10个AI论文平台,MBA毕业论文写作必备!
  • vue+uniapp+基于微信小程序的农产品交易商城平台_9o8s6r50--论文
  • 医院病历电子化加速:门诊处方单文字识别一步到位
  • vue+uniapp+基于微信小程序的大学生逃课心理测评系统
  • vue+uniapp+基于微信小程序的实验室考勤管理系统的设计与实现_t4n020ql--论文
  • CVE-2025-2011 漏洞利用工具:Depicter插件SQL注入检测与利用
  • 导师推荐8个AI论文平台,专科生毕业论文写作神器!
  • 计算机视觉课程实验设计:基于HunyuanOCR开展OCR原理教学
  • vue+uniapp+基于微信小程序的高校实验室管理系统设计与实现_7m1m7369--论文
  • leetcode 困难题 839. Similar String Groups 相似字符串组
  • 移动端适配优化:让HunyuanOCR支持手机拍照即时识别
  • 2026 语言模型万字长文:GPT-5.2(Instant / Thinking / Pro)对比 Claude 4.5(Haiku / Sonnet / Opus)——全面评测