动态规划-试题(4)-转移罪犯
来源:互联网 发布:python中执行shell脚本 编辑:程序博客网 时间:2024/06/03 11:46
转移罪犯
来源:百度2016研发工程师在线编程题
来源:http://t.cn/RyaLBmt
问题描述:
C市现在要转移一批罪犯到D市,C市有n名罪犯,按照入狱时间有顺序,另外每个罪犯有一个罪行值,值越大罪越重。现在为了方便管理,市长决定转移入狱时间连续的c名犯人,同时要求转移犯人的罪行值之和不超过t,问有多少种选择的方式?
分析
假设现在C市有10名罪犯,要转移3名,转移的罪行值不超过20。
罪犯的罪行值数组为:2-5-7-9-1-1-3-6-1-9
因为要按入狱顺序来,这给了我们很大的便利。我们先来看前3名能不能转移:2+5+7=16所以可以转移。然后我们去掉第1名,在加入第4名,发现5+7+9=21所以不能转移。接着继续去掉第2名,加入第5名,发现7+9+1=17所以可以转移。
如此下去就能找出所有能转移的方式了。
代码
public class Zuifanzhuanyi { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ handle(scanner); } } public static void handle(Scanner scanner) { int result = 0;//有多少种方法 /*收集数据*/ int n = scanner.nextInt();//C市罪犯总数 int t = scanner.nextInt();//转移罪行值不超过t int c = scanner.nextInt();//转移罪犯数量 int[] size = new int[n];//每个罪犯的罪行值,在本程序中使用size表示罪行值 for (int i = 0; i < n; i++) { size[i] = scanner.nextInt(); } /*处理*/ int init = 0; int currSize = 0; //填充第一阶段 for (int i = 0; i < c; i++) currSize += size[init + i]; if (currSize<=t) result++; //第二阶段 for (int i = c; i < n; i++) { currSize += size[i]; currSize -= size[i-c]; if (currSize<=t) result++; } System.out.println(result); }}
阅读全文
0 0
- 动态规划-试题(4)-转移罪犯
- 【动态规划】罪犯转移
- 动态规划-百度-罪犯转移
- 【牛客】【百度编程】罪犯转移 【动态规划】
- 试题“转移罪犯”和最高薪酬
- 罪犯转移
- 罪犯转移
- 罪犯转移
- 罪犯转移
- 罪犯转移
- 罪犯转移
- 罪犯转移
- 转移罪犯
- 罪犯转移
- 罪犯转移
- 动态规划转移方程
- 动态规划转移方程(二)
- 罪犯转移问题
- Codeforces Round #431 (Div. 2) 848A From Y to Y(思维)
- 洛谷p3387 拓扑+tarjan缩点
- 案例分享:如何通过JVM crash 的日志和core dump定位和分析Instrument引起的JVM crash
- 开发者需要的 9 款代码比较工具
- 测试
- 动态规划-试题(4)-转移罪犯
- 二分查找及插值查找
- C#基础-045 练习题
- SQL Server 触发器
- 自定义view继承Button
- jdbc 增删改的通用方法
- 安装配置office
- MYSQL千万级数据量的优化方法积累
- idea安装以及初始化