📋 个人简介
🎉大家好,我是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本作业没写,第1000000000有1本作业没写
所以你被发了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;
}