這種題還是要先找問題的某些性質才能做
結論:1、乙個數中最多有兩個質數
2、兩個質數乙個小於根n,乙個大於根n
建二分圖
源點s向小於根n的質數連一條容量為1費用為0的邊
大於根n的質數向匯點t連一條容量為1費用為0的邊
小於根n的質數a向大於根n的質數b連一條容量為1費用為vab-va-vb的邊
va表示單獨選a的最大收益=a^(lgn/lga)
vb表示單獨選b的最大收益=b
vab表示同時選a和b的最大收益=a^(lg(n/b)/lga)*b
優化:如果乙個質數》n/2,那麼它只能單獨選,不用連邊
如果一條邊的費用<0,那麼不如不連
記得最後要加上1。
#include#include#include#include#include#include#define maxn 200010
#define maxm 2000010
#define inf 1000000000
using namespace std;
int head[maxn],to[maxm],c[maxm],next[maxm],len[maxm],p[maxm],fr[maxn],q[maxn],dis[maxn];
int prime[maxn];
bool vis[maxn];
int n,m,num,s,t,tot;
int ans;
void addedge(int x,int y,int z,int w)
bool spfa()
}vis[x]=0;
} if (dis[t]<0) return 0; else return 1;
}void mcf()
void costflow()
int cal(int n,int x)
int main()
} s=0,t=tot+1;num=1;
int pos=0;
for (int i=1;i<=tot;i++)
if ((long long)prime[i]*prime[i]<=n)
else
}for (int i=1;in) break;
int cost=cal(n/prime[j],prime[i])*prime[j]-cal(n,prime[i])-prime[j];
if (cost>0) addedge(i,j,1,cost);
}costflow();
printf("%d\n",ans+1);
return 0;
}
BZOJ3308九月的咖啡店
3308 九月的咖啡店 time limit 30 sec memory limit 128 mb submit 140 solved 49 description 深繪里在九份開了一家咖啡讓,如何調配咖啡民了她每天的頭等大事 我們假設她有n種原料,第i種原料編號為i,調配一杯咖啡則需要在這 裡若干...
bzoj 3308 九月的咖啡店 費用流
深繪里在九份開了一家咖啡讓,如何調配咖啡民了她每天的頭等大事我們假設她有n種原料,第i種原料編號為i,調配一杯咖啡則需要在這裡若干種兌在一起。不過有些原料不能同時在一杯中,如果兩個編號為i,j的原料,當且僅當i與j互質時,才能兌在同一杯中。現在想知道,如果用這n種原料來調同一杯咖啡,使用的原料編號之...
bzoj3308 九月的咖啡店 費用流
深繪里在九份開了一家咖啡讓,如何調配咖啡民了她每天的頭等大事 我們假設她有n種原料,第i種原料編號為i,調配一杯咖啡則需要在這 裡若干種兌在一起。不過有些原料不能同時在一杯中,如果兩個編號 為i,j的原料,當且僅當i與j互質時,才能兌在同一杯中。現在想知道,如果用這n種原料來調同一杯咖啡,使用的原料...