2021 가을 순풍 8.20 필기시험 모집
20149 단어 필기시험
#include
using namespace std;
// , ; , ( )
bool cmp(const pair<int,int>& a,const pair<int,int>& b){
if(a.second == b.second){
return a.first < b.first;
}
else if(a.second < b.second){
return false;
}
else{
return true;
}
}
int main(){
int n,m;
while (cin >> n >> m){
vector<int> bandwide(n,0);
vector<pair<int,int>> guests(m,make_pair(0,0));
for (int i = 0; i < n; ++i) {
cin >>bandwide[i];
}
for (int i = 0; i < m; ++i) {
cin >>guests[i].first>>guests[i].second;
}
//
sort(bandwide.begin(),bandwide.end());
sort(guests.begin(),guests.end(),cmp);
int maxval = 0;
for (int i = 0; i < m; ++i) {
// lower_bound , >=val
auto it = lower_bound(bandwide.begin(),bandwide.end(),guests[i].first);
//
if(it != bandwide.end()){
maxval += guests[i].second;
bandwide.erase(it);
}
}
cout<< maxval<<endl;
}
}
상금: n개의 퀘스트가 있습니다. 모든 퀘스트는 l, r, w로 퀘스트 시작, 종료 시간, 그리고 얻을 수 있는 돈을 표시합니다.크리스는 임무가 충돌하지 않는 상황에서 최대 얼마의 돈을 얻을 수 있는 욕심쟁이였다.입력: 3 1 3 5 2 7 3 5 10 1 출력: 6 사고방식: 동적 기획 상태 정의: dp[i]는 전 i+1 임무가 얻을 수 있는 최대 수익을 나타낸다.이동 방정식: i+1 작업은 이전 IndexCanPut(i) 작업 뒤에 연결할 수 있습니다: dp[i] = max(dp[i-1], dp[IndexCanPut(i)] + arr[i].money) 제1항 퀘스트는 앞의 퀘스트 뒤에 연결할 수 없습니다: dp[i]=max(dp[i-1],arr[i].money) 코드:
#include
using namespace std;
struct task{
int l,r,money;
};
typedef vector<task> task_arr;
int IndexCanPut(task_arr& arr,int i){
for (int j = i-1; j >= 0 ; --j) {
if(arr[j].r <= arr[i].l)
return j;
}
return -1;
}
bool cmp(task a,task b){
return a.r < b.r;
}
int task_sort(task_arr &arr){
int N = arr.size();
sort(begin(arr),end(arr),cmp);
vector<int> dp(N);
dp[0] = arr[0].money;
for (int i = 1; i < N; ++i) {
int inc_profit = arr[i].money;
int l =IndexCanPut(arr,i);
if(l != -1){
inc_profit +=dp[l];
}
dp[i] = max(inc_profit,dp[i-1]);
}
return dp[N-1];
}
int main(){
int n;
while (cin >> n){//
vector<task> tasks(n);
for (int i = 0; i < n; ++i) {
task temp;
int temp1,temp2,temp3;
cin >> temp1>>temp2>> temp3;
temp.l = temp1;
temp.r = temp2;
temp.money = temp3;
tasks[i] = temp;
}
cout<< task_sort(tasks)<<endl;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무 중 두 노드의 가장 가까운 공공 조상을 찾다제목: 두 갈래 나무 중 두 노드의 가장 가까운 공공 조상을 찾아 되돌려 달라고 한다. 알고리즘 사상: 이 문제의 관건은 모든 노드에 부모 노드를 가리키는 바늘을 포함하는 데 있다. 이로써 프로그램은 간단한 알고리즘...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.