K13148 新年贴福大挑战

53 篇文章 0 订阅
6 篇文章 0 订阅
文章描述了一个关于在除夕夜贴福字的问题,小科需要在不同时间期限内完成贴福字任务,每个任务消耗不同的体力值。通过排序和优化,目标是找到使总体力值消耗最小的计划。程序实现了一个基于时间优先的排序算法来解决这个问题。
摘要由CSDN通过智能技术生成

题目描述

除夕夜到来的前夕,小科正在和家人们布置家里的各个角落,使得整个家看起来更有新年氛围。春联已经贴过了,那么接下来小科需要将福字贴纸贴在家里的n块玻璃上。已知n块玻璃大小不完全相同,所以贴每块玻璃上的福字时,消耗的体力值不完全相同,但是耗费的时间相同,都是一个单位时间。同时,妈妈为了锻炼小科的工作效率,给每块玻璃都规定了一个最迟完成的时间期限,如果在这个期限前没有完成的话,那么小科将会得到一定的惩罚任务,这个惩罚任务需要消耗的体力值,是这块玻璃对应消耗体力值的两倍。现在给你每块玻璃需要消耗的体力值,以及他们的规定时间期限,问你能不能帮助小科安排他的贴福计划,使得他最终消耗的总体力值最小,最小体力值为多少,假设小科的体力值是不会用完的。

输入格式

输入共3行。
 第1行:一个整数n,表示玻璃的数量,n<=100
 第2行:n个整数以空格分隔,分别表示每块玻璃的规定完成期限(0<d<=n)
 第3行:n个整数以空格分隔,分别表示每块玻璃需要消耗的体力值(10<=k<=1000)

输出格式

第1行:一个整数,为最终消耗的最小体力值

输入输出样例

输入样例1:

 
5 4 2 3 3 1 100 50 80 120 200

输出样例1:

 
600

说明

【输入输出样例 1 说明】
 消耗体力为100的任务安排在时间点4完成,消耗体力100
 消耗体力为50的任务无法在期限内完成,消耗体力50*2=100
 消耗体力为80的任务安排在时间点2完成,消耗体力80
 消耗体力为120的任务安排在时间点3完成,消耗体力120
 消耗体力为200的任务安排在时间点1完成,消耗体力200
 共600体力。

【数据规模与约定】 

对于 100%的数据:0<d<=n<=100,0<=k<=1000。

【耗时限制】1000ms 【内存限制】128MB

//
//Created by Carlgood.
//
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<sstream>
using namespace std;
struct work
{
	int wi;
	int di;
}a[111];
bool cmp(const work &x,const work &y)
{
	return x.wi>y.wi;
}
bool flag[111];
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].di;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].wi;
	}
	sort(a+1,a+n+1,cmp);
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		bool ok=false;
		for(int j=a[i].di;j>=1;j--)
		{
			if(flag[j]==false)
			{
				flag[j]=true;
				ok=true;
				break;
			}
		}
		if(!ok) ans+=a[i].wi*2;
		else ans+=a[i].wi;
	}
	cout<<ans;
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值