CF 358D - 358E #209 (Div. 2)

本文探讨了两个算法问题:一是通过动态规划求解兔子喂食的最大快乐值;二是判断是否存在符合特定条件的一笔画路径,并给出实现代码。

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

D. Dima and Hares

problem

输入n (1 ≤ n ≤ 3000) a1 a2 ... an.   b1, b2, ..., bn.   c1, c2, ..., cn

n只兔子,每只兔子喂一遍,abc分别是旁边两只都饿着一直饿着一直饱着两只都饱着的joy值,按照某种顺序喂,求最大joy和。

think

两边的情况太模糊。。我纠结了很久。。

dp[i][0]表示喂完前i-1只第i只在第i-1只之后喂

dp[i][1]表示喂完前i-1只第i只在第i-1只之前喂

答案就是dp[n+1][0]

code  

  1. int a[N], b[N], c[N], dp[N][2];  
  2.   
  3. int main ()  
  4. {  
  5.     int n;  
  6.     scanf("%d", &n);  
  7.     for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);  
  8.     for(int i = 1; i <= n; ++i) scanf("%d", &b[i]);  
  9.     for(int i = 1; i <= n; ++i) scanf("%d", &c[i]);  
  10.     dp[1][0] = -100000;  
  11.     for(int i = 1; i <= n; ++i){  
  12.         dp[i+1][0] = max(dp[i][0] + b[i], dp[i][1] + a[i]);  
  13.         dp[i+1][1] = max(dp[i][0] + c[i], dp[i][1] + b[i]);  
  14.     }  
  15.     cout<<dp[n+1][0]<<endl;  
  16.     return 0;  
  17. }  


E. Dima and Kicks

   

problem

输入n m 和一个n*m的01矩阵,问是否存在“一笔画”,并且中间每笔的长度一样并且大于1

think

先判断是否有

11

11这样的,因为这样不能大于1

还有判断是否联通,还有基数点的个数最多2

code

  1. int a[1111][1111];  
  2. int vis[1111][1111];  
  3. int ans[1111];  
  4. int dx[] = {0, 0, 1, -1};  
  5. int dy[] = {-1, 1, 0, 0};  
  6. int n, m, amount;  
  7.   
  8. int gcd(int x, int y){  
  9.     return (x==0 ? y : gcd(y % x, x));  
  10. }  
  11.   
  12. int cal(int x, int y){  
  13.     int ans = 0;  
  14.     if(x > 1 && a[x-1][y]) ++ans;  
  15.     if(x < n && a[x+1][y]) ++ans;  
  16.     if(y > 1 && a[x][y-1]) ++ans;  
  17.     if(y < m && a[x][y+1]) ++ans;  
  18.     return ans;  
  19. }  
  20.   
  21. bool sq(){  
  22.     for(int i = 1; i < n; ++i)  
  23.         for(int j = 1; j < m; ++j){  
  24.             if(a[i][j]==1 && a[i+1][j]==1 && a[i][j+1]==1 && a[i+1][j+1]==1) return true;  
  25.         }  
  26.     return false;  
  27. }  
  28.   
  29. int dfs(int i,int j){  
  30.     if(i<1 || i>n || j<1 || j>m) return 0;  
  31.     if(!a[i][j] || vis[i][j]) return 0;  
  32.     vis[i][j]=true;  
  33.     return  dfs(i+1,j) + dfs(i-1,j) + dfs(i,j+1) + dfs(i,j-1) + 1;  
  34. }  
  35.   
  36. bool ou(){  
  37.     memset(vis, 0, sizeof(vis));  
  38.     for(int i = 1; i <= n; ++i){  
  39.         for(int j = 1; j <= m; ++j){  
  40.             if(a[i][j]==1){  
  41.                 if(dfs(i, j)==amount) return true;  
  42.                 else return false;  
  43.             }  
  44.         }  
  45.     }  
  46. }  
  47.   
  48. int solve(){  
  49.     memset(vis, 0, sizeof(vis));  
  50.     memset(ans, 0, sizeof(ans));  
  51.     int odd = 0;  
  52.     for(int i = 1; i <= n; ++i){  
  53.         for(int j = 1; j <= m; ++j){  
  54.             if(a[i][j]){  
  55.                 int num = cal(i, j);  
  56.                 odd += (num&1);  
  57.                 if(odd >= 3) return 0;  
  58.                 if(num == 2 && ((a[i+1][j]==1 && a[i-1][j]==1) || (a[i][j+1]==1 && a[i][j-1]==1))) continue;  
  59.                 vis[i][j] = 1;  
  60.             }  
  61.         }  
  62.     }  
  63.     int gg = 1;  
  64.     for(int i = 1; i <= n; i++){  
  65.         for(int j = 1; j <= m; ++j) if(vis[i][j]){  
  66.             for(int d = 0, k; d < 4; ++d){  
  67.                 for(k = 1; a[i+dx[d]*k][j+dy[d]*k] && !vis[i+dx[d]*k][j+dy[d]*k]; ++k);  
  68.                 if(k > 1){  
  69.                     ans[k] = 1;  
  70.                     gg = k;  
  71.                 }  
  72.             }  
  73.         }  
  74.     }  
  75.   
  76.     for(int k = max(n, m); k > 1; --k)  
  77.     if(ans[k]) gg = gcd(gg, k);  
  78.     return gg;  
  79. }  
  80.   
  81. int main(){  
  82.     amount = 0;  
  83.     scanf("%d%d", &n, &m);  
  84.     memset(a, 0, sizeof(a));  
  85.     for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; amount += a[i][j], ++j) scanf("%d", &a[i][j]);  
  86.     if(sq() || !ou()){  
  87.         puts("-1");  
  88.         return 0;  
  89.     }  
  90.     int res = solve();  
  91.     if(res < 2) puts("-1");  
  92.     else{  
  93.         for(int i = 2; i < res; ++i){  
  94.             if(res % i == 0) printf("%d ", i);  
  95.         }  
  96.         printf("%d\n", res);  
  97.     }  
  98.     return 0;  
  99. }  
<h2 class="level2">一、研究背景与意义</h2> <div class="content"> 复杂肝胆管结石是肝胆外科难治性疾病之一,具有结石分布广泛、胆管狭窄发生率高、肝实质萎缩明显等特点,术后结石残留率(20%-50%)和复发率(23.8%)居高不下,严重影响患者预后<document id="2"></document><document id="8"></document>。精准定位结石、评估胆管狭窄及肝内血管解剖是提高手术疗效的关键,但传统影像学检查(如超声、CT)存在二维图像空间分辨率有限、难以实时动态评估等不足<document id="3"></document>。 </div> <div class="content"> 三维可视化技术通过对肝脏、胆道及血管的数字化重建,可立体显示结石分布、胆管狭窄部位及血管解剖关系,显著降低结石残留率(0% vs 9.5%)和手术时间(218.8min vs 254.7min)<document id="2"></document><document id="4"></document>;术中超声可实时定位深部结石、评估胆管通畅性,弥补术前三维重建静态评估的局限<document id="38"></document>。然而,目前关于两者联合应用的系统性研究较少,其在复杂肝胆管结石中的协同价值尚未明确。本研究旨在探索三维可视化联合术中超声的应用效果,为优化复杂肝胆管结石诊疗策略提供依据。 </div> <h2 class="level2">二、国内外研究现状</h2> <div class="content"> 国外研究表明,三维重建技术可提高肝切除术的精准性,其引导的手术在结石清除率(100% vs 90.5%)和胆管狭窄矫正率(98.2% vs 85.7%)方面优于传统手术<document id="2"></document>。术中超声在实时定位肝内微小结石(<5mm)中表现突出,但其单独应用受限于操作者经验,对复杂胆管解剖的整体评估不足<document id="6"></document>。 </div> <div class="content"> 国内研究中,三维可视化技术已广泛用于肝胆管结石的术前规划,如MI-3DVS软件可实现胆道系统的个体化重建,引导腹腔镜解剖性肝切除的结石清除率达100%<document id="3"></document><document id="4"></document>;术中超声联合胆道镜可提高复杂病例的结石取出率(93.3% vs 78.6%)<document id="8"></document>。但现有研究多聚焦单一技术的应用,对三维可视化与术中超声的联合评估、动态协同机制探讨不足,尤其缺乏对双侧肝胆管结石、合并肝萎缩病例的针对性分析<document id="35"></document><document id="39"></document>。 </div> <h2 class="level2">三、研究目的与内容</h2> <h2 class="level2" style="font-size:16pt">(一)研究目的</h2> <div class="content"> 1. 评估三维可视化联合术中超声在复杂肝胆管结石术前规划、术中定位及术后疗效中的应用价值;<br> 2. 比较联合技术与单一技术(三维可视化或术中超声)在手术指标(出血量、时间)、结石清除率及复发率中的差异;<br> 3. 建立基于联合技术的复杂肝胆管结石个体化诊疗流程。 </div> <h2 class="level2" style="font-size:16pt">(二)研究内容</h2> <div class="content"> 1. 病例选择:回顾性收集2022年1月至2024年1月80例复杂肝胆管结石患者,分为联合组(40例,三维可视化+术中超声)和对照组(40例,单一三维可视化或术中超声),纳入标准:结石分布≥2个肝段、合并胆管狭窄或肝萎缩<document id="24"></document><document id="31"></document>;<br> 2. 技术应用:联合组术前通过三维重建明确手术范围,术中超声实时验证结石清除情况及胆管通畅性;对照组采用单一技术引导手术<document id="4"></document><document id="38"></document>;<br> 3. 疗效评价:比较两组手术时间、术中出血量、结石清除率(术后1周CT/MRCP评估)、术后6个月复发率及并发症(胆瘘、胆管炎)发生率<document id="2"></document><document id="8"></document>。 </div> <h2 class="level2">四、研究方法与技术路线</h2> <h2 class="level2" style="font-size:16pt">(一)研究方法</h2> <div class="content"> 1. 三维重建:采用64排螺旋CT采集数据(层厚0.625mm),通过MI-3DVS软件进行肝脏、胆道、血管分割与重建,测量结石体积、胆管狭窄程度及拟切除肝段体积<document id="4"></document><document id="36"></document>;<br> 2. 术中超声:采用高频探头(5-10MHz)实时探查肝内结石、评估胆管直径及血流情况,重点验证三维重建显示的狭窄部位和血管走形<document id="38"></document><document id="41"></document>;<br> 3. 统计学分析:采用SPSS 26.0,计量资料以(x±s)表示,组间比较用t检验;计数资料以率表示,用χ&sup2;检验,P<0.05为差异有统计学意义。 </div> <h2 class="level2" style="font-size:16pt">(二)技术路线</h2> <div class="content"> 病例筛选→分组(联合组/对照组)→联合组:术前三维重建+术中超声引导手术;对照组:单一技术引导手术→术后1周评估结石清除率→术后3、6个月随访(复发率、并发症)→数据统计分析→结论 </div> <h2 class="level2">五、预期成果与创新点</h2> <h2 class="level2" style="font-size:16pt">(一)预期成果</h2> <div class="content"> 1. 明确三维可视化联合术中超声可提高复杂肝胆管结石的结石清除率(≥95%),降低复发率(<5%);<br> 2. 形成《三维可视化联合术中超声在复杂肝胆管结石中的应用指南》;<br> 3. 发表核心期刊论文2-3篇,申请实用新型专利1项。 </div> <h2 class="level2" style="font-size:16pt">(二)创新点</h2> <div class="content"> 1. 首次系统探讨三维可视化与术中超声的协同机制,弥补术前静态评估与术中动态验证的技术断层;<br> 2. 针对双侧肝胆管结石、合并肝萎缩等复杂病例,建立基于联合技术的个体化手术方案<document id="35"></document><document id="39"></document>。 </div> <h2 class="level2">六、参考文献</h2> <div class="reference">[1] Fang CH, et al. Outcomes of Hepatectomy for Hepatolithiasis Based on 3-Dimensional Reconstruction Technique. J Am Coll Surg, 2013, 217(2):280-288.<document id="2"></document></div> <div class="reference">[2] 王小方, 等. 三维可视化在解剖性肝切除治疗肝胆管结石中的应用效果. 中国当代医药, 2023, 30(6):59-62.<document id="3"></document></div> <div class="reference">[3] 范应方, 等. 3D技术在精准肝胆管结石外科诊治中的应用研究. 南方医科大学博士学位论文, 2021.<document id="4"></document></div> <div class="reference">[4] Zhang ZH, et al. Value of multidisciplinary team in minimally invasive treatment of complex intrahepatic bile duct stones. BioScience Trends, 2021, 15(3):161-170.<document id="8"></document></div> <div class="reference">[5] 三维可视化技术在腹腔镜解剖性肝切除治疗Ⅰ型肝胆管结石病中的应用. 中国普通外科杂志, 2022, 31(5):621-627.<document id="38"></document></div> <div class="reference">[6] 三维可视化技术在复杂肝胆管结石病中的应用研究. 中华外科杂志, 2020, 58(8):612-617.<document id="35"></document></div> <div class="reference">[7] Yang ZQ, et al. Application of three-dimensional visualization technology in early surgical repair of bile duct injury during laparoscopic cholecystectomy. BMC Surgery, 2024, 24:271.<document id="6"></document></div> <div class="reference">[8] 解剖性肝切除治疗复发性肝胆管结石病. 中华肝胆外科杂志, 2021, 27(3):176-179.<document id="31"></document></div> <div class="btn-container"> <a href="#" class="download-btn">下载Word文档</a> </div>直接运行,提供word下载按钮
最新发布
07-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值