日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P3265-[JLOI2015]装备购买【线性基,拟阵贪心】

發布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P3265-[JLOI2015]装备购买【线性基,拟阵贪心】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/P3265


題目大意

給出nnn個有權值的mmm元組。求最大獨立集,即一個最大的集合且內部元素線性無關。且在集合最大的情況下權值和最小

通俗的說就是沒有任何一個元素內被其他元素的倍數和表示。


解題思路

我們考慮線性基的本質就是擬陣的一個最大獨立集,我們可以用線性基的方法來做。

也就是需要構造一個實數線性基。根據之前[BJWC2011]元素這道題的方法,我們知道我們可以根據權值從小到大加入直到無法加入為止。

考慮如何用擬陣證明這個貪心的最優性。設一個擬陣(S,L)(S,L)(S,L),定義TTT是最優集合,現在我們知道了一個AAATTT的子集,考慮證明加入一個目前權值最小的wwwA∪{x}?TA\cup \{x\}\subseteq TA{x}?T
證明

  • A′=A∪{x}A'=A\cup\{x\}A=A{x}A′?TA'\nsubseteq TA?T那么,先定義一個T′=A′T'=A'T=A∣T′∣<∣T∣|T'|<|T|T<T,根據擬陣的交換性則一定存在一個t∈Tt\in TtTt?T′t\notin T't/?TT′∪{x}∈LT'\cup\{x\}\in LT{x}L。那么我們不停將xxx加入T′T'T中直到∣T′∣=T|T'|=TT=T那么此時有(T′?{w})∪{x}=T(T'-\{w\})\cup\{x\}=T(T?{w}){x}=T。也就是val(T′)?val(w)+val(x)=val(T)val(T')-val(w)+val(x)=val(T)val(T)?val(w)+val(x)=val(T)
    而又因為val(w)<val(x)val(w)<val(x)val(w)<val(x)所以val(T′)<val(T)val(T')<val(T)val(T)<val(T),那么TTT就不是最優子集,所以不成立。
    證畢

所以我們就這樣從小到大加即可,時間復雜度O(nm2)O(nm^2)O(nm2)


codecodecode

#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int N=510; const double eps=1e-5; struct node{double x[N];int w; }a[N]; int n,m,cnt,p[N],ans; bool cmp(node x,node y) {return x.w<y.w;} int main() {scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%lf",&a[i].x[j]);for(int i=1;i<=n;i++)scanf("%d",&a[i].w);sort(a+1,a+1+n,cmp);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)if(fabs(a[i].x[j])>eps){if(!p[j]){p[j]=i;cnt++;ans+=a[i].w;break;}else{double rate=a[i].x[j]/a[p[j]].x[j];for(int k=j;k<=m;k++)a[i].x[k]-=a[p[j]].x[k]*rate;}}}printf("%d %d\n",cnt,ans); }

總結

以上是生活随笔為你收集整理的P3265-[JLOI2015]装备购买【线性基,拟阵贪心】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。