摘要: 题目描述: 一节课有n分钟,ZZZ每听一分钟课都能得到一定的分数,一旦她开始听课就必须要至少连续听l分钟,但是她每节课都要有m分钟的睡眠时间(这m分钟不连续),问在不影响她睡觉的情况下, 她一节课最多能得多少分。。。题面建模: dp。首先dp[i][j]表示前i分钟有j分钟是睡觉时间, 如果第i分钟睡觉dp[i][j]=dp[i-1][j-1];第i分钟学习的话: dp[i][j]=max(dp[k][j]+score[i]-score[k]) (1<=k<=i-l)。 score[i]表示前i分钟的分数之和。解题要点: 注意边界的处理和dp数组的初始化,开始的时候应将dp[i][ 阅读全文
posted @ 2012-04-21 10:59 LETTers 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 题目描述: 给出n个数,从中找出k对数使得每对数差的平方之和最小。题面建模: dp。 设定dp[i][j]存储的值为当选择到第i个数时,已选出j对数的最小差的平方。 那么有转移方程dp[i][j]=Min(dp[i-1][j],dp[i-2][j-1]+(object[i]-object[i-1])*(object[i]-object[i-1])) 这样最后的答案为dp[n][k]。解题要点: 注意边界的处理和dp数组的初始化,开始的时候应将dp[i][j]=INF。时空开销分析: 空间复杂度:O(n)。时间复杂度:O(n^2)。特别说明: 无。程序:#include <stdio.h& 阅读全文
posted @ 2012-04-21 10:23 LETTers 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 题目描述: 有一个爱收集骨头(不良癖好)的家伙,他有一个背包,容积是V。现在有n块骨头,每块骨头有两个属性:体积volume和价值value。问他能够收集的骨头的价值之和最大是多少。题面建模: 简单背包问题。 背包已用容积是j时,dp[j]=max(dp[j],dp[j-volumek]+valuek)。 转移方程:dp[j]=dp[j]>dp[j-bone[i][1]]+bone[i][0]?dp[j]:dp[j-bone[i][1]]+bone[i][0];解题要点: 注意边界的处理。时空开销分析: 空间复杂度:O(n)。时间复杂度:O(n^2)。特别说明: 无。程序:#includ 阅读全文
posted @ 2012-04-21 09:56 LETTers 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 题目描述: 本题题意就是给出一个n*m矩阵,然后求一个x*y的子矩阵,并且此子矩阵元素和最大。题面建模: 简单模拟。 思路还是很简单的,我们设计一个sum[n][m],其中sum[i][j]表示以(1,1)为左上顶点,以(i,j)为右下顶点的矩阵的所有元素和。这样我们要求以(i,j)为右下顶点大小为x*y的子矩阵所有元素和就有以下公式:ans=sum[i][j]-sum[i-x][j]-sum[i][j-y]+sum[i-x][j-y]遍历所有这样的子矩阵就可以求出答案。解题要点: 注意边界的处理。时空开销分析: 空间复杂度:O(n^2)。时间复杂度:O(n^2)。特别说明:无。程序:#inc 阅读全文
posted @ 2012-04-21 09:33 LETTers 阅读(223) 评论(0) 推荐(0) 编辑