題目大意:
給你一些開區間,讓你選擇一些區間(開區間),使得沒有乙個數字出現的次數超過k次的情況下,獲得的價值最大。
分析:首先將輸入的區間離散化,之後對於相鄰的節點,連一條容量為inf,費用為0的邊,之後對於每乙個區間,加一條容量為1,花費為-的w[i]的邊。源點和1之間建立一條容量為k,花費為0的邊,在m與匯點間建立一條容量為k的邊。
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef
long
long ll;
const
int maxn =
400+10;
const
int inf =
0x3f3f3f3f
;struct edge
;struct mcmf
void
addedge
(int from,
int to,
int cap,
int cost));
edges.
push_back
((edge));
m=edges.
size()
; g[from]
.push_back
(m-2);
g[to]
.push_back
(m-1);
} bool bellmanford
(int s,
int t,
int&flow,
int& cost)}}
}if(d[t]
==inf)
return false;
flow+
=a[t]
; cost+
=d[t]
*a[t]
;int u=t;
while
(u!=s)
return true;
}int
mincost
(int s,
int t)
}d;int temp[maxn]
;struct node
s[maxn]
;int
main()
sort
(temp,temp+cnt)
;int m=
unique
(temp,temp+cnt)
-temp;
int s_=
0,t=m+1;
d.init
(m+1);
for(
int i=
1;i) d.
addedge
(i,i+
1,inf,0)
; d.
addedge
(s_,
1,k,0)
; d.
addedge
(m,t,k,0)
;for
(int i=
0;i)int ans = d.
mincost
(s_,t)
;printf
("%d\n"
,-ans);}
return0;
}
368 最大整除子集
給出乙個由無重複的正整數組成的集合,找出其中最大的整除子集,子集中任意一對 si,sj 都要滿足 si sj 0 或 sj si 0。如果有多個目標子集,返回其中任何乙個均可。示例 1 輸入 1,2,3 輸出 1,2 當然,1,3 也正確 示例 2 輸入 1,2,4,8 輸出 1,2,4,8 思路 ...
368 最大整除子集
給出乙個由無重複的正整數組成的集合,找出其中最大的整除子集,子集中任意一對 si,sj 都要滿足 si sj 0 或 sj si 0。如果有多個目標子集,返回其中任何乙個均可。示例 1 輸入 1,2,3 輸出 1,2 當然,1,3 也正確 示例 2 輸入 1,2,4,8 輸出 1,2,4,8 自己寫...
交叉編譯Python 3 6 8
安裝 python3.6 安裝 交叉編譯器 按實際工程安裝對應版本,這裡是gcc 版本 8.2.1 20180802 gnu toolchain for the a profile architecture 8.2 2018 08 arm rel 8.23 注意需要在pc中安裝python3.6 注...