2018.02.04(补作业系列)

2018.02.04

补作业系列

1.合并石子

思路:

核心代码:

状态转移方程&解析:s[i]表示前i堆石子的数量总和,f[i][j]表示把第i堆石子到第j堆石子合并成一堆的最优值。

1 for ( i = n-1 ; i >= 1 ; i-- ){
2     for ( j = i+1 ; j <= n ; j++ ){
3         for ( k = i ; k <= j-1 ; k++ ){
4             f[i][j] = min ( f[i][j] , f[i][k] + f[k+1][j] + s[j] -s[i-1] );
5         }
6     }
7 }
8 输出f[1][n]

状态:AC

2.挖地雷

思路:

核心代码:

 1 #include <stdio.h>
 2 #include <math.h>
 3 #include <string.h>
 4 int main(){
 5     long f[201]={0},w[201],c[201]={0};
 6     int a[201][201]={0};
 7     long i,j;
 8     long n;
 9     long x,y;
10     long l,k,maxx;
11     memset(f,0,sizeof(f));
12     memset(c,0,sizeof(c));
13     memset(a,0,sizeof(a));
14     scanf("%d",&n);
15     for(i=1;i<=n;i++)
16         scanf("%ld",&w[i]);
17     for(i=1;i<n;i++){
18         for(j=i+1;j<=n;j++){
19             scanf("%d",&x);
20             if(x==1)a[i][j]=1;
21         }
22     }
23     f[n]=w[n];
24     for(i=n-1;i>=1;i--){
25         l=0;k=0;
26         for(j=i+1;j<=n;j++)
27             if((a[i][j])&&(f[j]>l)){
28                 l=f[j];k=j;
29             }
30         f[i]=l+w[i];
31         c[i]=k;
32     }
33     k=1;
34     for(j=2;j<=n;j++)
35         if(f[j]>f[k])k=j;
36     maxx=f[k];
37     printf("%ld",k);
38     k=c[k];
39     while(k!=0){
40         printf(" %ld",k);
41         k=c[k];
42     }
43     printf("\n%ld\n",maxx);
44     return 0;
45 }

状态转移方程&解析:

很明显,题目所规定的所有路径都是单向的,所以满足无后效性原则和最优化原理。设w[i]为第i个地窖所藏有的地雷数,a[i][j]表示第i个地窖与第j个地窖之间是否有通路,f[i]为从第i个地窖开始最多可以挖出的地雷数,则有如下递归式:

1 f[i]=max{ w[i]+f[j] }    ( i<j<=n  &&  a[i][j]=true )
2 边界: f[n]=w[n]

于是就可以通过递推的方法,从后面的f(n)往前逐个找出所有的f[i],再从中找出一个最大的即为问题二的解。对于具体走的路径(问题一),可以通过一个向后的链接来实现。

状态:AC

原文地址:https://www.cnblogs.com/yzyl-Leo-wey/p/8412530.html

时间: 2024-08-29 19:16:24

2018.02.04(补作业系列)的相关文章

Oracle数据库创建与安装_超越OCP精通Oracle视频教程培训02~04

_超越OCP精通Oracle视频教程培训02~04 学完本Oracle视频教程能掌握以下内容: Oracle数据库相关概念/体系结构/物理结构/逻辑结构 Oracle数据库GRID组件与ASM存储概念 VMware虚拟机的安装与主机环境的配置 Windows2008 Server操作系统安装 Linux操作系统安装与基本配置 Windows/Linux操作系统Oracle 11g数据库软件的安装 Windows/Linux操作系统Oracle 11g数据库的创建 Linux上Oracle11g基

Amethys CADwizz 2004 v2.02.04 1CD(可以快速的浏览AuotCAD的图纸文件

Amethys CADwizz 2004 v2.02.04 1CD(可以快速的浏览AuotCAD的图纸文件.它支持从AutoCAD 2.5到 2002各个版本,支持.DWG以及.DXF文件) MechSoft ProDuctivity Pack For Inventor v8.0-ISO 1CD AEC.VIZ.v2.6.1.5.21.WinALL 1CD AlignAndSpace 2004 v1.1 for AutoCAD 1CD AbleVektor for AutoCAD v3.0 1C

hdu5017:补题系列之西安网络赛1011

补题系列之西安网络赛1011 题目大意:给定一个椭球: 求它到原点的最短距离. 思路: 对于一个椭球的标准方程 x^2/a^2 + y^2/b^2 +z^2/c^2=1 来说,它到原点的最短距离即为min(a,b,c) 所以我们需要把原方程化为标准型. 这时候线代就排上用场了,注意到原方程是一个二次型. 化为标准型 1/(k1)*x^2+1/(k2)*y^2+1/(k3)*z^2=1 后  min(k1,k2,k3)即为答案 而这里的1/k1,1/k2,1/k3 就是二次型矩阵的特征值 如何求特

20155222卢梓杰 课下测试04补做

20155222卢梓杰 课下测试04补做 1.SEQ+对SEQ的改变有() A . PC的计算挪到取指阶段 B . PC的计算挪到访存阶段 C . 电路重定时 D . 插入流水线寄存器 E . 对信号进行重排和标号 F . 处理流水线冒险 正确答案: A C D E F 解析:在SEQ+中,创建状态寄存器来保存在一条指令执行过程中计算出来的信号.然后,当一个新的时钟周期开始时,这些信号值通过同样的逻辑来计算当前指令的PC. SEQ+中对状态元素的改变称为电路重定时,在SEQ+的各个阶段之间插入了

第04次作业-树

第04次作业-树 1.学习总结 1.1树结构思维导图 1.2 树结构学习体会 树的结构是一种非线性结构,一对多,定义也是递归的,有一个根结点和任意个子树. 我的学习体会:我觉得树相比之前的一对一的线性结构来说,难度增大了很多,树的实现又会借用到之前学的栈啊,队列啊,就像是之前所学的大杂烩,并且会用上递归,虽然递归可读性很好,但是想出怎么写也是很难,看懂容易,自己写递归不容易. 树可以应用在查找,如二叉搜索树,用在求类似最优路径的问题,如哈夫曼树,应用在做计算表达式,把表达式转化成树,再求值,能算

新手C#string类常用函数的学习2018.08.04

ToLower()用于将字符串变为小写,注意字符串的不可变特性,需要重新赋值给另一个字符串变量. s = s.ToLower();//字符串具有不可变性,转换后需要重新赋值,不可仅有s.ToLower(); 这可以使用户的输入不区分大小写,例如验证码. ToUpper()用于将字符串全部变为大写,与上面类似. Trim()可以用于去掉两边的空格. string s1 = " a b c "; s1 = s1.Trim();//用于去除字符串两边的空格 Console.WriteLine

毕设进度2020.02.04

毕设进度2020.02.04 今天基本上将所有自己现在想到的数据库的表建立完成了. 用户(基本不算) 团组织信息表: 图书表: 原文地址:https://www.cnblogs.com/liurx/p/12261863.html

Ecrin v4.02.04 1CD(试井解释软件)

开源变色龙4.5分色印花软件_完整版\宇柏林_治具\ F:\_temp_soft\18\Ansoft Maxwell 3D.2D v11.1-ISO 1CD.isoASAP入门手册简体中文.rarCoreTech.Moldex3D.R9.0_科盛科技模具专家.isoDyadem.PHA-Pro.v6.0.0.23.zipSimulation.Engine.1D.Gt-Power.Gt.Suite.v6.1发动机模拟分析软件.binAutoPLANT 2004 Edition 中文版-ISO 1C

软件工程(2018)结对编程第一次作业

第一次结对编程作业 代码审查表 功能模块名称 表达式的括号匹配 审查人 常远 审查日期 2018.4.4 代码名称 表达式的括号匹配 代码作者 郭靖 文件结构 重要性       审查项 结论                  头文件和定义文件的名称是否合理? 是 头文件和定义文件的目录结构是否合理? 是 版权和版本声明是否完整? 否 重要 头文件是否使用了 ifndef/define/endif 预处理块? 是 头文件中是否只存放"声明"而不存放"定义" 是 程序