CF853A Planning【贪心】

本文介绍了一个关于航班调度的问题,通过使用优先队列实现最优的航班重新安排,以最小化因延误产生的总费用,并提供了完整的C++代码实现。

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

题意:有n个航班,被延误了,前面k分钟都不能飞,每个航班延误1分钟需要花费Ci,k+1~k+n时间段内,重新排班,使花费最小,任意航班不能提前飞


思路:,后面这项为常数,考虑每个时间能飞的航班,时间从小到大,花费越大的优先,花费和最小。用一个优先队列把这个时间能飞的航班放进去


#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<stdlib.h>
#include<math.h>
#include<vector>
#include<list>
#include<map>
#include<stack>
#include<queue>
#include<algorithm>
#include<numeric>
#include<functional>
using namespace std;
typedef long long ll;
const int maxn = 300000+5;
struct data
{
	ll cost;
	int id;
	bool friend operator<(const data &x,const data &y)
	{
		return x.cost < y.cost;
	}
};
priority_queue<data> q;
int t[maxn];
ll cost[maxn];
int main(void)
{
	int n,k;
	while(scanf("%d%d",&n,&k)!=EOF)
	{
		ll ans = 0; 
		for(int i = 1; i <= n; i++)
		{
			scanf("%lld",&cost[i]);
			ans -= cost[i] * i;
		}		
		while(!q.empty())
			q.pop();
		for(int i = 1; i <= k; i++)
			q.push((data){cost[i],i});
		int time = k+1;
		while(!q.empty())
		{
			if(time <= n) q.push((data){cost[time],time});
			data a = q.top();q.pop();
			t[a.id] = time;
			ans += time * a.cost;
			time++;
		}
		printf("%lld\n",ans);
		for(int i = 1; i <= n; i++)
			printf("%d%c",t[i],i==n?'\n':' ');
	}
	return 0;
}


<think>我们正在讨论的是“手动下载模型并放置到缓存目录”的方案(方案二)在Windows系统上的具体实现步骤。根据用户要求,需要详细介绍方法1(实际应为方案二)在Windows上的实现步骤。但注意用户提到“我想详细介绍方法1的实现步骤”,而根据上下文,我们之前提供了方案一(使用环境变量)和方案二(手动下载模型并放置到缓存目录)。由于用户明确要求“详细介绍方案二”,且现在要求详细介绍在Windows系统上的步骤,因此我们将重点放在方案二在Windows系统上的详细步骤。 然而,用户提供的引用内容与Hugging Face模型下载无关,而是关于Windows操作系统版本、Windows To Go、Windows安装Python和Linux子系统的内容。因此,我们需要忽略这些引用,专注于之前关于方案二的描述。 回顾方案二:手动下载模型并放置到缓存目录。在Windows系统上的具体步骤包括: 1. 下载模型文件 2. 确定缓存目录 3. 创建正确的目录结构 4. 放置文件 5. 验证配置 下面将详细展开这些步骤,特别针对Windows系统。 ### Windows系统下手动配置Hugging Face模型缓存目录的详细步骤 #### 步骤1: 下载模型文件 在Windows系统中,您可以使用浏览器或命令行工具(如PowerShell)下载所需文件。 1. **访问镜像站**:打开浏览器,访问Hugging Face镜像站上的模型页面: ``` https://hf-mirror.com/bert-base-uncased ``` 2. **下载文件**:在页面中找到并逐个下载以下文件(点击文件名称,然后点击“Download”按钮): - `config.json` - `pytorch_model.bin` - `vocab.txt` - `tokenizer.json` - `special_tokens_map.json` 或者,使用PowerShell批量下载(在PowerShell中执行以下命令): ```powershell # 创建目录并进入 mkdir bert-base-uncased cd bert-base-uncased # 下载文件 $files = @("config.json", "pytorch_model.bin", "vocab.txt", "tokenizer.json", "special_tokens_map.json") $baseUrl = "https://hf-mirror.com/bert-base-uncased/resolve/main/" foreach ($file in $files) { Invoke-WebRequest -Uri ($baseUrl + $file) -OutFile $file } ``` #### 步骤2: 确定缓存目录位置 在Windows系统中,Hugging Face的默认缓存目录位于: ``` C:\Users\<您的用户名>\.cache\huggingface\hub ``` 其中`<您的用户名>`需要替换为您的实际用户名(例如`C:\Users\JohnDoe\.cache\huggingface\hub`)。 #### 步骤3: 创建缓存目录结构 1. **创建模型目录**: - 在`hub`目录下,创建名为`models--bert-base-uncased`的文件夹(如果不存在)。 - 进入`models--bert-base-uncased`文件夹。 2. **创建子目录**: - 创建`snapshots`文件夹。 - 在`snapshots`文件夹内,创建一个以模型版本哈希ID命名的文件夹(例如`9d853a0f3a8c7d9e0b3e5f2a7b1c4d6e`)。注意:这个哈希ID需要从模型页面获取(见步骤4)。 3. **创建引用文件**: - 在`models--bert-base-uncased`文件夹内,创建`refs`文件夹。 - 在`refs`文件夹内,创建名为`main`的文本文件(无扩展名)。 - 将哈希ID(例如`9d853a0f3a8c7d9e0b3e5f2a7b1c4d6e`)写入`main`文件中(不带任何空格或换行)。 4. **放置模型文件**: - 将步骤1中下载的所有文件复制到`snapshots\<哈希ID>`文件夹内。 目录结构示例: ``` C:\Users\JohnDoe\.cache\huggingface\hub └── models--bert-base-uncased ├── .locks (可选,系统会自动生成) ├── blobs (可选,系统会自动生成) ├── refs │ └── main # 内容为: 9d853a0f3a8c7d9e0b3e5f2a7b1c4d6e └── snapshots └── 9d853a0f3a8c7d9e0b3e5f2a7b1c4d6e ├── config.json ├── pytorch_model.bin ├── vocab.txt ├── tokenizer.json └── special_tokens_map.json ``` #### 步骤4: 获取模型版本哈希ID 1. **通过网页获取**: - 访问模型页面:`https://hf-mirror.com/bert-base-uncased` - 在文件列表上方,找到类似`main`或`latest commit`的标识,点击可查看完整的40位哈希值(例如`9d853a0f3a8c7d9e0b3e5f2a7b1c4d6e`)。通常只需要前7位即可,但为了准确,建议使用完整哈希值(如果目录名允许,可以使用完整40位,但实践中通常使用7位,但具体取决于缓存目录的要求。注意:根据Hugging Face的缓存机制,目录名通常使用完整哈希值,但实际观察发现,有时目录名是7位,有时是40位。为了确保兼容,建议使用完整的40位哈希值,但注意目录名长度限制。如果40位太长,可以使用7位,但必须保证与`refs/main`文件中的内容一致)。 如果页面没有显示,可以通过API获取: ```powershell # 使用PowerShell获取模型信息 $modelInfo = Invoke-RestMethod -Uri "https://hf-mirror.com/api/models/bert-base-uncased" $sha = $modelInfo.sha # 获取最新的commit哈希 ``` 或者使用命令行工具`curl`(如果已安装): ```powershell curl https://hf-mirror.com/api/models/bert-base-uncased ``` 在返回的JSON中查找`sha`字段。 #### 步骤5: 验证配置 创建Python脚本`verify_model.py`,内容如下: ```python from transformers import BertTokenizer, BertModel try: tokenizer = BertTokenizer.from_pretrained("bert-base-uncased") model = BertModel.from_pretrained("bert-base-uncased") print("模型加载成功!输出维度:", model.embeddings.word_embeddings.weight.shape) except Exception as e: print("加载失败:", str(e)) ``` 在PowerShell中运行: ```powershell python verify_model.py ``` 预期输出: ``` 模型加载成功!输出维度: torch.Size([30522, 768]) ``` #### 常见问题解决(Windows特有) 1. **文件权限问题**: - 如果遇到权限错误,右键点击`.cache`文件夹,选择“属性” > “安全” > 编辑权限,确保当前用户有完全控制权限。 2. **路径长度限制**: - Windows默认有路径长度限制(260个字符)。如果遇到路径太长的问题,可以启用长路径支持(在组策略中设置)或尝试将缓存目录放在更靠近根目录的位置(例如`C:\hf_cache`),然后设置环境变量`HF_HOME`为该目录。 3. **哈希ID不一致**: - 确保`refs/main`文件中的哈希ID与`snapshots`下的目录名完全一致(包括大小写)。 4. **文件损坏**: - 重新下载文件,并检查文件大小是否与原始文件一致(可在模型页面查看文件的SHA256值)。 #### 设置自定义缓存路径(可选) 为避免系统盘空间不足,您可以设置环境变量`HF_HOME`来更改缓存目录: 1. 打开“系统属性” -> “高级” -> “环境变量”。 2. 在“用户变量”中,新建变量: - 变量名:`HF_HOME` - 变量值:`D:\huggingface_cache`(您希望的任何路径) 3. 将之前创建的目录结构移动到新路径下(例如`D:\huggingface_cache\hub\models--bert-base-uncased`)。 这样,Transformers库将自动使用新的缓存路径。 ### 相关问题 1. 如何获取Hugging Face模型的最新commit哈希值? 2. Windows系统下如何批量下载Hugging Face模型文件? 3. 手动配置模型缓存后如何强制transformers库使用本地文件? 4. 在Windows系统中如何解决Hugging Face缓存路径过长的问题?</think>### 方案二:手动下载模型并放置到缓存目录的详细实现步骤(Windows系统) #### 步骤1:下载模型文件 1. 访问Hugging Face镜像站: ``` https://hf-mirror.com/bert-base-uncased ``` 2. 下载必需文件(右键点击"Download"按钮保存): - `config.json` → 模型配置文件 - `pytorch_model.bin` → PyTorch权重文件 - `vocab.txt` → 词汇表文件 - `tokenizer.json` → 分词器配置 - `special_tokens_map.json` → 特殊标记映射 #### 步骤2:确定缓存目录位置 Windows系统默认缓存路径: ``` C:\Users\<您的用户名>\.cache\huggingface\hub\models--bert-base-uncased ``` > 示例:`C:\Users\John\.cache\huggingface\hub\models--bert-base-uncased` #### 步骤3:创建目录结构 1. 创建核心目录(在文件资源管理器中操作): ``` models--bert-base-uncased/ ├── .locks/ ├── refs/ └── snapshots/ ``` 2. 在`refs/`下创建`main`文件: - 新建文本文件 → 重命名为`main`(无扩展名) - 写入哈希ID(如:`9d853a0f`) 3. 在`snapshots/`下创建哈希目录: - 新建文件夹 → 命名为哈希ID(如:`9d853a0f`) - 将下载的模型文件移入此目录 最终结构: ``` models--bert-base-uncased/ ├── .locks/ ├── refs/ │ └── main # 内容为: 9d853a0f └── snapshots/ └── 9d853a0f/ # 实际模型文件 ├── config.json ├── pytorch_model.bin ├── vocab.txt └── ... ``` #### 步骤4:获取哈希ID(Windows方法) 1. **浏览器获取**: - 访问模型页面:`https://hf-mirror.com/bert-base-uncased` - 查看文件列表上方的commit ID(7位或40位哈希值) 2. **PowerShell获取**: ```powershell (Invoke-RestMethod "https://hf-mirror.com/api/models/bert-base-uncased").sha ``` #### 步骤5:验证配置 1. 创建测试脚本`verify.py`: ```python from transformers import BertTokenizer, BertModel print("正在加载模型...") tokenizer = BertTokenizer.from_pretrained("bert-base-uncased") model = BertModel.from_pretrained("bert-base-uncased") print("加载成功! 嵌入维度:", model.embeddings.word_embeddings.weight.shape) ``` 2. 运行验证: ```powershell python verify.py ``` 成功输出: ``` 加载成功! 嵌入维度: torch.Size([30522, 768]) ``` #### 故障排除(Windows特有) 1. **权限问题**: ```powershell icacls "C:\Users\<用户名>\.cache\huggingface" /grant Users:(F) /T ``` 2. **路径长度限制**: - 修改注册表启用长路径支持: ``` HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem 新建DWORD值:LongPathsEnabled = 1 ``` 3. **文件验证**: ```powershell Get-FileHash .\pytorch_model.bin -Algorithm SHA256 ``` #### 应用场景 此方案特别适用于: 1. 企业内网环境(无法直连Hugging Face) 2. 需要严格版本控制的模型部署 3. 离线服务器环境 4. 需要避免重复下载的CI/CD流水线 > 通过此方法配置后,所有基于Transformers库的应用(如Grounded-SAM)将自动使用本地模型[^1] ### 相关问题 1. Windows系统下如何批量下载Hugging Face模型文件? 2. 手动配置模型缓存后如何强制transformers库使用本地文件? 3. 在Windows中如何解决Hugging Face缓存路径过长的问题? 4. 如何验证下载的模型文件完整性?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值