0
点赞
收藏
分享

微信扫一扫

C++ 又要写不完作业了

小_北_爸 2022-04-14 阅读 148

📋 个人简介

🎉大家好,我是3月份新人榜排名第三的 ༺Blog༒Hacker༻
💬支持我:点赞👍+收藏⭐️+留言📝
🌺格言:༺永做优质༒programmer༻

📣 又要写不完作业了!

题目背景

题目描述

输入格式

输入样例1
4 1 1
1 10 100 1000
1 1
2 2
2 3
2 100
输出样例1
100
输入样例2
4 2 6
1 10 100 1000
1 4
2 2
2 3
2 100
输出样例2
2
输入样例3
4 4 1
1 10 100 1000
1 1
2 2
2 3
2 100
输出样例3
You are over!
输入样例4
10 4 8
1 10 100 1000 1001 1002 1003 1004 1005 1006
1 1
2 1
1000000000 1
1 1
1 1
1 2
1 7
1 8
2 4
2 5
输出样例4
20
输入样例5
10 4 8
1 10 11 1000 1001 1002 1003 1004 1005 1006
1 1
2 1
1000000000 1
1 1
1 1
1 8
1 2
1 7
2 4
2 5
输出样例5
13
输入样例6
5 3 3
1 10 100 1000 5000
1 1
1 3
1 2
2 1
3 1
输出样例6
10
样例解释
样例5:写第1,2,4,5,9本作业,超过4本作业

剩下第1科有3本作业没写(6,7,8),第2课有1本作业没写,第10000000001本作业没写

所以你被发了11+1+1的火

(看样子1大概是语文,2大概是数学,1000000000大概是美术)
数据范围
对于50%的数据1≤k≤100,1≤tot≤500
对于100%的数据1≤m≤n≤100,1≤t≤100,1≤k≤109,1≤tot,hi≤5000
Limits
1s,64MB

💯CODE

#include <bits/stdc++.h>
#define for1(i,n) for(i=1;i<=(n);i++)
#define for0n(i,n) for(i=0;i<=(n);i++)
#define forlr(i,l,r) for(i=(l);i<=(r);i++)
using namespace std;
const int T=5005,N=105;
int dp1[N][T],dp2[N][T],h[N],n,m,tot,ck,a[N][N],ca[N],ans=1e9;
unordered_map<int,int> map1;
int main(){
	scanf("%d%d%d",&n,&m,&tot);
	int i,j,k,x,y;
	for1(i,n) scanf("%d",&h[i]);
	for1(i,n){
		scanf("%d%d",&x,&y);
		int &mx=map1[x];
		if(!mx) mx=++ck;
		a[mx][++ca[mx]]=y;
	}
	memset(dp1,0x1f,sizeof(dp1));
	memset(dp1[0],0,sizeof(dp1[0]));
	for1(i,ck){
		memset(dp2,0x1f,sizeof(dp2));
		sort(a[i]+1,a[i]+ca[i]+1);
		for1(j,ca[i]) a[i][j]+=a[i][j-1];
		for0n(j,ca[i]) forlr(k,j,n) forlr(x,a[i][j],tot)
			dp2[k][x]=min(dp2[k][x],dp1[k-j][x-a[i][j]]+h[ca[i]-j]);
		memcpy(dp1,dp2,sizeof(dp1));
	}
	forlr(i,m,n) ans=min(ans,dp2[i][tot]);
	if(ans>1e8) printf("You are over!\n");
	else printf("%d\n",ans);
	return 0;
}

🔮朋友们,点赞是我更新的动力,明天再见,拜拜!!!

在这里插入图片描述

举报

相关推荐

0 条评论