happiness[國家集訓隊2011(吳確)]

【試題來源】

2011中國國家集訓隊命題答辯

【問題描述】

高一一班的座位表是個n*m的矩陣,經過一個學期的相處,每個同學和前后左右相鄰的同學互相成為了好朋友。這學期要分文理科了,每個同學對于選擇文科與理科有著自己的喜悅值,而一對好朋友如果能同時選文科或者理科,那么他們又將收獲一些喜悅值。作為計算機競賽教練的scp大老板,想知道如何分配可以使得全班的喜悅值總和最大。

【輸入格式】

第一行兩個正整數n,m。
接下來是六個矩陣
第一個矩陣為n行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學選擇文科獲得的喜悅值。
第二個矩陣為n行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學選擇理科獲得的喜悅值。
第三個矩陣為n-1行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i+1行第j列的同學同時選擇文科獲得的額外喜悅值。
第四個矩陣為n-1行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i+1行第j列的同學同時選擇理科獲得的額外喜悅值。
第五個矩陣為n行m-1列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i行第j+1列的同學同時選擇文科獲得的額外喜悅值。
第六個矩陣為n行m-1列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i行第j+1列的同學同時選擇理科獲得的額外喜悅值。

【輸出格式】

輸出一個整數,表示喜悅值總和的最大值

【樣例輸入】

1 2
1 1
100 110
1
1000

【樣例輸出】

1210

【樣例說明】

兩人都選理,則獲得100+110+1000的喜悅值。

【數據規模和約定】

對于10%以內的數據,n,m<=4
對于30%以內的數據,n,m<=8
對于100%以內的數據,n,m<=100 數據保證答案在2^30以內
對于100%的數據,時間限制為0.5s。
【題解】
? ??這道題的難點在于確定邊權。最小割問題,割去的就是我們失去的部分;兩點之間有關系,總是通過建邊來實現的。對于這道題來說,每種情況我們都失去了什么?以源點代表文科,匯點代表理科。都選一科(三角環),失去了共同選另一科和分別選另一科的喜悅值。分別選兩科(二字形),失去了兩個共同喜悅值和兩個單獨選另一科的喜悅值。(可以證明可能出現的情況只有這兩種,否則都不會是最小割)相同位置的邊權構成一定相同,因此用數學方法推出每個人到源點或匯點的邊權為個人喜悅值+1/2共同喜悅值,兩點之間邊權為1/2都選文+1/2都選理。注意共同邊要雙向建邊,因為兩點之間是完全等效的;每個人向源點和匯點的邊應該在邊權全部處理完之后再統一添加。
? ? 可以發現邊權會出現實型,結果卻一定是整型。對于這種情況,可以把邊權全部*2,最后結果再/2來避免double的麻煩。dfs函數中有一個語句:if(!f) break;原先從來沒打過,這道題不加這個卻會超時,加了之后直接上榜,確實是一個非常有理有據的優化。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int sj=105;
int n,m,sx[sj][sj],e,h[sj*sj],s,t,dep[sj*sj];
int w[sj][sj],l[sj][sj],g[sj][sj],z[sj][sj],a1,ans;
struct B
{int ne,v,w;
}b[sj*sj*10];
queue<int> q;
void add(int x,int y,int z)
{b[e].v=y;b[e].w=z;b[e].ne=h[x];h[x]=e++;
}
void init()
{scanf("%d%d",&n,&m);t=n*m+1;memset(h,-1,sizeof(h));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&w[i][j]);sx[i][j]=(i-1)*m+j;ans+=w[i][j];w[i][j]*=2;}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&l[i][j]);ans+=l[i][j];l[i][j]*=2;}for(int i=1;i<n;i++)for(int j=1;j<=m;j++){scanf("%d",&a1);ans+=a1;g[i][j]=a1;w[i][j]+=a1;w[i+1][j]+=a1;}for(int i=1;i<n;i++)for(int j=1;j<=m;j++){scanf("%d",&a1);ans+=a1;g[i][j]+=a1;l[i][j]+=a1;l[i+1][j]+=a1;add(sx[i][j],sx[i+1][j],g[i][j]);add(sx[i+1][j],sx[i][j],g[i][j]);}for(int i=1;i<=n;i++)for(int j=1;j<m;j++){scanf("%d",&a1);ans+=a1;z[i][j]=a1;w[i][j]+=a1;w[i][j+1]+=a1;add(s,sx[i][j],w[i][j]);add(sx[i][j],s,0);}for(int i=1;i<=n;i++){add(s,sx[i][m],w[i][m]);add(sx[i][m],s,0);}for(int i=1;i<=n;i++)for(int j=1;j<m;j++){scanf("%d",&a1);ans+=a1;z[i][j]+=a1;l[i][j]+=a1;l[i][j+1]+=a1;add(t,sx[i][j],0);add(sx[i][j],t,l[i][j]);add(sx[i][j],sx[i][j+1],z[i][j]);add(sx[i][j+1],sx[i][j],z[i][j]);}for(int i=1;i<=n;i++){add(sx[i][m],t,l[i][m]);add(t,sx[i][m],0);}ans*=2;
}
bool bfs(int x)
{while(!q.empty()) q.pop();memset(dep,0,sizeof(dep));dep[x]=1;q.push(x);while(!q.empty()){x=q.front();q.pop();for(int i=h[x];i!=-1;i=b[i].ne)if(!dep[b[i].v]&&b[i].w){dep[b[i].v]=dep[x]+1;if(b[i].v==t) return 1;q.push(b[i].v);}}return 0;
}
int bj(int x,int y)
{return x<y?x:y;
}
int dfs(int x,int f)
{if(x==t) return f;int ans=0,d;for(int i=h[x];i!=-1;i=b[i].ne)if(dep[b[i].v]==dep[x]+1&&b[i].w){d=dfs(b[i].v,bj(f,b[i].w));f-=d;ans+=d;b[i].w-=d;b[i^1].w+=d;if(!f) break;}if(!ans) dep[x]=-1;return ans;
}
int main()
{init();while(bfs(s))  ans-=dfs(s,0x7fffffff);printf("%d",ans/2);return 0;
}
happiness

?

轉載于:https://www.cnblogs.com/moyiii-/p/7265199.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281094.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281094.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281094.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sketch怎么移動圖層_什么是Photoshop Express,Fix,Mix和Sketch移動應用程序?

sketch怎么移動圖層Adobe’s approach to mobile apps seems to be “The More, The Better”. Right now, there are five Photoshop branded apps available for iOS and Android. Adobe的移動應用程序方法似乎是“越多越好”。 目前&#xff0c;有五個適用于iOS和Android的P…

imessage_如何在iPhone和iPad上的iMessage組中提及某人

imessageKhamosh PathakKhamosh PathakSometimes, it’s difficult to get someone’s attention in a large iMessage group chat on your iPhone or iPad. However, if you mention that person specifically in a message, your friend will receive a notification about i…

點擊右側導航欄,實現iframe嵌入子頁面中div,滑動到最上面

2019獨角獸企業重金招聘Python工程師標準>>> // 點擊對應的nav里的li標簽,頁面就滾動到哪里 $(.title-list > li).click(function(event) {$(this).addClass(active).siblings().removeClass(active);//li標簽里面有a標簽,可以阻止到a標簽的默認行為event.preven…

wepack環境配置1之node的安裝

.向往已久的webpack終于配好了.. 1.要安裝webpack&#xff0c;首先需要安裝nodejs nodejs下載地址:https://nodejs.org/en/ 下載完成后,一步步安裝即可,我是安裝到D盤 新建一個nodejs的文件夾,裝到這個文件夾里面即可. 安裝完畢后檢查自己是否安裝成功.啟動cmd,然后輸入npm -v,…

【賞析】.NET跨平臺框架-Avalonia UI

這是Avalonia UI官方的一個Demo&#xff0c;站長對部分Nuget包進行了升級&#xff0c;網友【小飛機MLA】對Linux版本修復了字體Bug得以正常運行、演示&#xff1a;Windows 11&#xff1a;macOS 13&#xff1a;可安裝Rider&#xff08;EAP即要&#xff09;開發&#xff0c;站長一…

Kernel Newbies內核開發新手的資源

Jessica McKellar在Ksplice blog上的博客文章《Linux Device Drivers》如果你在寫一個操作系統&#xff0c;OSDev wiki是一個不錯的網站Kernel Newbies內核開發新手的資源

office自定義安裝選項_如何自定義Office 2013中功能區上的現有選項卡

office自定義安裝選項The Ribbon in Microsoft Office 2013 provides quick access to many features and options by default, but it can be further customized to fit the way you use it. You can add a custom tab to the ribbon or you can add commands to the existin…

Centos6.8 安裝spark-2.3.1 以及 scala-2.12.2

一、Spark概述 Spark 是一個用來實現快速而通用的集群計算的平臺。 在速度方面&#xff0c;Spark 擴展了廣泛使用的 MapReduce 計算模型&#xff0c;而且高效地支持更多計算模式&#xff0c;包括交互式查詢和流處理。 在處理大規模數據集時&#xff0c;速度是非常重要的。速…

聊一聊 WPF 程序的鍵盤是如何被竊聽的?

一&#xff1a;背景 1.講故事前幾天群里很熱鬧&#xff0c;看了下在爭論兩個問題&#xff1a;電腦里要不要裝殺毒軟件 ?應該裝什么殺毒軟件 ?不管殺毒軟件流氓不流氓&#xff0c;在如今病毒肆虐的當下互聯網&#xff0c;裝一個還是能幫我們攔截很多意想不到的東西&#xff0c…

httpclient 實現文件上傳中轉

開發功能&#xff1a; web前端提交上傳文件 —> a服務器接收 —> 轉發到b服務器進行文件處理 下面是簡單實現的代碼&#xff0c;具體細節優化根本自己的需求更改。 public String handleResponse(HttpServletRequest request, HttpServletResponse response)throws Unsup…

AngularJS $watch 性能殺手

雙向綁定是AngularJS核心概念之一&#xff0c;它給我們帶來了思維的轉變&#xff0c;不再是以DOM為驅動&#xff0c;而是以Model為核心&#xff0c;View中寫上聲明式標簽&#xff08;指令或{{}}&#xff09;,AngularJS會在后臺默默同步View到Model,并將Model的變化更新到View。…

ipad和iphone切圖_如何在iPhone和iPad上的Messages App中固定對話

ipad和iphone切圖Khamosh PathakKhamosh PathakBetween updates from your bank and group chats, the Messages app on your iPhone or iPad can be a mess. Use the pinned conversations feature introduced in iOS 14 and iPadOS 14 to access your favorite conversations…

這個WPF的企業級MES項目爆火,就是UI爭議大!

工業4.0時代&#xff0c;智能智造MES系統大行其道&#xff0c;然而基于.NET跨平臺的罕見&#xff01;這里有一套《.NET6WPF企業級MES實戰》教程&#xff0c;基于.NET6跨平臺開發&#xff0c;實現了MES多核心功能&#xff0c;尤其是開發框架完整&#xff0c;非常適合復用。這里分…

單調棧學習筆記

線性結構——單調棧①定義&#xff1a;棧內的元素&#xff0c;按照某種方式排序&#xff08;單調遞增或單調遞減&#xff09;如果新入棧的元素破壞了單調性&#xff0c;就彈出棧內元素&#xff0c;直到滿足單調性②優點&#xff1a;可以很方便地求出某個數左邊或者右邊第一個比…

《VMware Virtual SAN權威指南(原書第2版)》一1.5 什么是Virtual SAN

1.5 什么是Virtual SAN Virtual SAN是VMware推出的一種存儲解決方案&#xff0c;它的beta版本在2013年發布&#xff0c;2014年3月正式開放給公眾&#xff0c;并于2016年3月升級到6.2版。VSAN完全集成在vSphere中&#xff0c;它是一種基于對象的存儲系統&#xff0c;是虛擬機存…

js 控制超出字數顯示省略號

//多余顯示省略號 function wordlimit(cname, wordlength) {var cname document.getElementsByClassName(cname);for (var i 0; i < cname.length; i) {      var nowLength cname[i].innerHTML.length;if (nowLength > wordlength) {cname[i].innerHTML cname…

在Outlook 2007中查看您的Google日歷

Google Calendar is a phenomenal web application for managing your calendars, but so many of us are still forced to use Outlook at work. The good thing is you can have the best of both worlds by subscribing to your Google Calendar from Outlook. Google日歷是…

元宇宙、數字孿生和企業NFT

昨天參加了華為云上海開發者日活動&#xff0c;并客串主持了一場"元宇宙技術創新和商業實踐之路"的閉門研討會。研討會上大家討論熱烈&#xff0c;干貨多多&#xff0c;大家提到元宇宙的企業級前景、數字藏品和數字人案例的親身體會。在會上盆盆分享了自己關于企業級…

設置狀態欄和標題欄的樣式

設置狀態欄和標題欄的樣式Android setSystemUiVisibility(visible)方法詳解這個方法可以詳細的設置各種標題欄的狀態欄的樣式.visible的值來決定1.SYSTEM_ UI_ FLAG_ LOW_ PROFILE: 影藏不重要的狀態欄圖標&#xff0c;導航欄中相應的圖標都變成了一個小點。點擊狀態欄或者標題…

CMD命令硬盤/光驅掛載

使用Mountvol命令掛載時&#xff0c;發現GUID不對啊&#xff0c;哪應該到哪找呢&#xff1f; 1.首先可以用Mountvol命令&#xff1a; Mountvol 創建、刪除或列出卷的裝入點。Mountvol 是一種不需要驅動器號而連接卷的方式。 語法&#xff1a; mountvol [Drive:]Path VolumeName…