SDUT 2860-生日Party(BFS)
生活随笔
收集整理的這篇文章主要介紹了
SDUT 2860-生日Party(BFS)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
生日Party
Time Limit: 1000ms?? Memory limit: 65536K??有疑問?點這里^_^
題目描寫敘述
Sherlock的生日即將來臨,Sherlock打算邀請幾個好友來參加自己的生日Party。為了讓Party盡可能的happy,經過Sherlock的調查發現每一個好友都有一個happy值。并且Sherlock的好友之間也存在復雜的關系,當好友中的某兩個人同一時候出如今Party的時候,會產生一個額外的happy值,幸虧Sherlock好友不算多,Sherlock打算邀請部分或所有好友(也可能一個都不邀請),好讓Party的happy值最高輸入
有多組數據,首先一個整數T表示所給數據的組數。每組數據第一行一個整數n(0<n<=15),表示Sherlock的好友人數。第二行n個整數依次表示每一個好友假設來參加Party將會產生的happy值,接下來n行,每行n個整數,第i行的第j個整數表示當第i個好友和第j個好友同一時候參加party是產生的額外happy值 注意,所給數據中的happy值的范圍為(-100~100)輸出
每組數據輸出一行,Sherlock的Party最高的happy值演示樣例輸入
4 2 1 2 0 -2 -2 0 3 -1 -1 0 0 1 1 1 0 1 1 1 0 3 1 1 1 0 -1 -1 -1 0 -1 -1 -1 0 3 -1 -1 -1 0 -2 -2 -2 0 -2 -2 -2 0演示樣例輸出
2 1 1 0之前一直在往dp方面想,結果一直推不出狀態轉移方程。。(sad 我dp就是個渣啊)并且mjj也說這是dp 防ak的 后來突然看到scf用暴搜過的!好吧我承認我也想過但前天才學的bfs之前也敲不出來,話說回來這題暴搜的思路也是非常靈異的,對于第i個朋友,有兩種狀態,所以搜完一輪復雜度為O(2^15) 不須要標記數組,硬搜救能夠了
?#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #include <queue> using namespace std; typedef struct node {int a[20],ans,x,top;//a數組里面放參加party的朋友的編號 }; int ma[20][20]; int fri[20],Max,n; void bfs() {node t,v;queue <node> Q;t.top=0;t.ans=0;t.x=-1;Q.push(t);while(!Q.empty()){v=Q.front();Q.pop();if(v.x==n-1)//每選完一輪更新一下最大值{if(Max<v.ans)Max=v.ans;continue;}//兩個搜索方向,要么選此人,要么不選t.x=v.x+1;//不選第i個人t.ans=v.ans;t.top=v.top;for(int i=0;i<v.top;i++)t.a[i]=v.a[i];Q.push(t);//選第i個人t.top=v.top+1;t.a[v.top]=t.x;t.ans=v.ans+fri[t.x];for(int i=0;i<v.top;i++)t.ans+=ma[t.a[i]][t.x];Q.push(t);} } int main() {int T,i,j;cin>>T;while(T--){cin>>n;for(i=0;i<n;i++)cin>>fri[i];for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>ma[i][j];Max=-1;bfs();if(Max<0)cout<<"0"<<endl;elsecout<<Max<<endl;}return 0; }
轉載于:https://www.cnblogs.com/blfshiye/p/4290000.html
總結
以上是生活随笔為你收集整理的SDUT 2860-生日Party(BFS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hybrid开发
- 下一篇: HTML5开发手机应用--viewpor