【洛谷】P2392 kkksc03考前临时抱佛脚

本题最重要的思路是:将题目转化为 01 背包模型。 

注意点:

(1)要求最短时间,则需让左右脑花费的时间最接近,极限状态下是左脑时间和右脑时间相等,且等于 m = sum / 2(其中sum是一道一道做完一科所有题目的总时间)。

(2)从(1)可知,我们要将某科的若干道题目相加,使其总时间最接近 m,此时做完这一科的时间是最短时间。

(3)这道题中,时间既是体积又是价值。

(4)最终返回的时间应该是左右脑时间中的较大值,可以假设左脑时间一直小于等于右脑,也就是左脑时间 ≤ m,故左脑是容积为 m 的01背包

#include<iostream>
using namespace std;

int t[25];

int f(int n)
{
	int sum = 0;
	// sum 表示一道一道做完所有题目的总时间。 
	// 左右脑所用的时间越接近,最终花费时间就越短, 
	// 故只需求最接近 m=sum/2 的情况下,花费时间的最大值。 
	// 下面假设左脑花费时间始终 ≤m 。 
	int dp[1210] = {0};
	
	for(int i=0;i<n;++i)
	{
		scanf("%d", &t[i]);
		sum += t[i];
	}
	
	if(n == 1) return sum;
	// 只有一道题目则不需要计算直接返回 
	
	int m = sum/2;
	
	// 体积为 m=sum/2 的 01 背包模型 
	for(int i=0;i<n;++i)
	{
		for(int j=m;j>=t[i];--j)
		{
			dp[j] = max(dp[j], dp[j-t[i]] + t[i]);
		}
	}
	
	return sum - dp[m];
	// 上式表示右脑花费时间,
	// 因为前面假设了右脑花费时间始终比左脑多。 
	// 最终结果是取左右脑中较多的时间 
}

int main()
{
	int s1,s2,s3,s4;
	scanf("%d%d%d%d", &s1, &s2, &s3, &s4);
	
	int ans = f(s1) + f(s2) + f(s3) + f(s4);
	// f(i) 表示有 i 道题目时,花费的最短时间 
	
	cout<<ans;
	return 0;
}

相关推荐

  1. P2392 kkksc03临时抱佛脚

    2024-02-04 12:40:04       39 阅读
  2. kkksc03临时抱佛脚01背包问题)

    2024-02-04 12:40:04       15 阅读
  3. P8823

    2024-02-04 12:40:04       36 阅读
  4. P2863

    2024-02-04 12:40:04       18 阅读
  5. P2957 [USACO09OCT] Barn Echoes G

    2024-02-04 12:40:04       39 阅读
  6. P2895 [USACO08FEB] Meteor Shower S

    2024-02-04 12:40:04       15 阅读
  7. p2006题。p2006题。

    2024-02-04 12:40:04       44 阅读
  8. P1540 机器翻译

    2024-02-04 12:40:04       43 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-04 12:40:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-04 12:40:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-04 12:40:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-04 12:40:04       20 阅读

热门阅读

  1. 【BBF系列协议】TR181-1 TR069的设备数据模型

    2024-02-04 12:40:04       31 阅读
  2. C++指针

    2024-02-04 12:40:04       34 阅读
  3. 接口自动化测试框架解析

    2024-02-04 12:40:04       36 阅读
  4. 《Python等级认证CCF-GESP真题解析》专栏总目录

    2024-02-04 12:40:04       34 阅读
  5. 十六、K8S-Job(批处理)和Cronjob:定时任务

    2024-02-04 12:40:04       35 阅读
  6. 查找单词-算法(深度优先)

    2024-02-04 12:40:04       31 阅读
  7. 前端学习02

    2024-02-04 12:40:04       27 阅读
  8. C/C++ - 类模板

    2024-02-04 12:40:04       30 阅读
  9. Elasticsearch重建索引-修改索引字段类型

    2024-02-04 12:40:04       34 阅读
  10. windows安装git与git配置

    2024-02-04 12:40:04       35 阅读
  11. protobuf 序列化协议之数据结构

    2024-02-04 12:40:04       33 阅读
  12. SpringBoot打包

    2024-02-04 12:40:04       24 阅读