版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40984919/article/details/81461727
每次都在想,为什么自己想不到解决方法。为何人家的代码都是几行。。(还是自己写的代码太少QAQ)
当时候写这个题的时候还在想是不是要搜索,是不是要用到贪心。当我看到大佬的代码的时候,意识到思维是真的强。
思路:先找到直接生成的。然后通过暴力(结合二分)去求解。
代码:
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<bitset>
#include<math.h>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define close ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
typedef long long ll;
const int MAX_N=1000000+50;
const int INF=0x3f3f3f3f;
const double EPS = 1e-10;
ll mod = 1e9+7;
ll a[MAX_N],b[MAX_N],c[MAX_N],d[MAX_N];
int main(){
ll n,m,k,x,s;
cin>>n>>m>>k>>x>>s;
for(int i = 0 ; i < m; i++) cin>>a[i];
for(int i = 0 ; i < m; i++) cin>>b[i];
for(int i = 1 ; i <= k; i++) cin>>c[i];
for(int i = 1 ; i <= k; i++) cin>>d[i];
ll ans = (n - c[upper_bound(d+1,d+k+1,s) - d - 1]) * x;
for(int i = 0; i < m; i++){
if(b[i] > s) continue;
ans = min(ans, (n - c[upper_bound(d+1,d+k+1,s-b[i]) - d - 1]) * a[i]);
}
cout<<ans<<endl;
return 0;
}
/*
********
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
*/