acdream 1409 Musical 狀壓DP

鏈接:http://acdream.info/problem?

pid=1409

題意:整個國家有n座城市,每座城市有三種粉絲。

第一種一周看一場音樂劇,挑選的音樂劇是已經在周圍城市播放上演過的次數最多的音樂劇中的隨機一個。

另外一種每天看一場音樂劇,挑選的是在本城市上映的音樂劇中的隨機一個。

第三種每天看一場音樂劇,挑選的是在本城市以及周圍城市中上映的音樂劇中的隨機一個。

周圍的城市是指這座城市與當前城市之間存在路徑。

我如今要帶著一部音樂劇環游全國(能夠坐飛機,不用走路徑),每座城市呆一周,而且還存在其它m座城市在這n周內繞國上映(也可能放假),問我這個音樂劇所能吸引到的粉絲的總數的期望是多少。

思路:首先要模擬找出每座城市每周的上映音樂劇數量。每座城市每周周圍的上映的音樂劇數,每一個音樂劇在每周每座城市內存在的信息數。

然后用狀態壓縮,dp[i][j]表示第i周狀態為j的條件下能吸引到的粉絲總數。

這題比較繁瑣。模擬過程比較蛋疼。

代碼:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <ctype.h>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#define eps 1e-8
#define INF 0x7fffffff
#define PI acos(-1.0)
#define seed 31//131,1313
//#define LOCAL
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
double city[15][5];
bool vis[15][15][15];//音樂劇,周,城市
bool now[15][15][15];
int V[15][15];
int top[15];
int aa[15][15][15];//音樂劇,周。城市的信息數
int ans[15];
int road[15];
int Pow[15];
int cc[15][15];//周,城市的上映音樂劇數
int dd[15][15];//周,相鄰以及本身上映的音樂劇數
double dp[15][1500];
int p[15][1500];
void init()
{Pow[0]=1;for(int i=1; i<=10; i++)Pow[i]=Pow[i-1]*2;return ;
}
int main()
{init();int n,m,kk,c;scanf("%d%d%d",&n,&m,&kk);for(int i=0; i<n; i++)scanf("%lf%lf%lf",&city[i][0],&city[i][1],&city[i][2]);for(int i=1; i<=m; i++){int u,v;scanf("%d%d",&u,&v);V[u-1][top[u-1]++]=v-1;V[v-1][top[v-1]++]=u-1;}for(int i=1; i<=kk; i++)//劇{for(int j=1; j<=n; j++)//周{scanf("%d",&c);c--;if(j!=1)for(int k=0; k<n; k++)vis[i][j][k]=vis[i][j-1][k];vis[i][j][c]=1;now[i][j][c]=1;cc[j][c]++;dd[j][c]++;for(int k=0; k<top[c]; k++)dd[j][V[c][k]]++;}}for(int i=1; i<=kk; i++) //音樂劇for(int j=1; j<=n; j++) //周for(int k=0; k<n; k++) //城市for(int l=0; l<top[k]; l++){if(vis[i][j][V[k][l]])aa[i][j][k]++;}int mos=(1<<n);for(int i=0; i<=n; i++)for(int j=0; j<mos; j++)dp[i][j]=-1;dp[0][0]=0;for(int i=1; i<=n; i++)//周{for(int j=1; j<mos; j++)//狀態{for(int k=0; k<n; k++)//到的城市{//cout<<k<<endl;int res=0;if(j-Pow[k]<0)break;if(dp[i-1][j-Pow[k]]!=-1){for(int l=0; l<top[k]; l++)if(Pow[V[k][l]]&j)res++;int flag = 0;double tot = 0;for(int l=1; l<=kk; l++){if(aa[l][i][k]>res&&now[l][i][k]){flag = 1;break;}else if(aa[l][i][k]==res&&now[l][i][k])tot++;}double all = 0;if(flag == 0)all+=city[k][0]/(tot+1);all+=city[k][1]*7/(cc[i][k]+1);all+=city[k][2]*7/(dd[i][k]+1);for(int ii=0; ii<top[k]; ii++){int pos=V[k][ii];all+=city[pos][2]*7/(dd[i][pos]+1);}if(all+dp[i-1][j-Pow[k]]>dp[i][j]){dp[i][j]=all+dp[i-1][j-Pow[k]];p[i][j]=k;}}}}}int nn=mos-1;int way[15],ttt=0;for(int i=n; i>=1; i--){//cout<<p[i][nn]<<endl;way[ttt++]=p[i][nn];nn-=Pow[p[i][nn]];}printf("%.8lf\n",dp[n][mos-1]);for(int i=ttt-1;i>=0;i--){if(i==ttt-1)printf("%d",way[i]+1);else printf(" %d",way[i]+1);}printf("\n");return 0;
}


轉載于:https://www.cnblogs.com/mengfanrong/p/5348274.html

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

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

相關文章

真正的模塊化Web應用程序:為什么沒有開發標準?

OSGI &#xff0c; SpringSource &#xff0c; Jboss模塊 &#xff0c;J2EE和清單永遠不會結束。所有這些技術都向他們的最終用戶/開發人員保證了相同的東西&#xff0c;或多或少是Java模塊化Web應用程序&#xff08;&#xff1f;&#xff09;。 但是&#xff0c;我們當中有多少…

C語言5-7習題

本題要求實現一個函數&#xff0c;用下列公式求cos(x)的近似值&#xff0c;精確到最后一項的絕對值小于e&#xff1a; #include <stdio.h> #include <math.h>double funcos( double e, double x );int main() { double e, x;scanf("%lf %lf", &…

JDBC批處理executeBatch

JDBC運行SQL聲明&#xff0c;有兩個處理接口&#xff0c;一PreparedStatement,Statement,一般程序JDBC有多少仍然比較PreparedStatement 只要運行批處理&#xff0c;PreparedStatement少一點Statement ps conn.prepareStatement(sql); for(int i 0;i<10;i){ ps.setString(…

BC div2補題以及 復習模除 逆元__BestCoder Round #78 (div.2)

第一題沒話說 智商欠費 加老柴輔導終于過了 需要在意的是數據范圍為2的63次方-1 三個數相加肯定爆了 四邊形的定義  任意邊小于其余三邊之和 換句話說就是  最長邊小于其余三邊之和 這樣的話問題轉化為 最長邊依次減其余三邊的結果是否小于等于0 還有一點是題目出現0邊 即最…

習題6-1 分類統計字符個數 (15 分)

本題要求實現一個函數&#xff0c;統計給定字符串中英文字母、空格或回車、數字字符和其他字符的個數。 函數接口定義&#xff1a; void StringCount( char s[] );其中 char s[] 是用戶傳入的字符串。函數StringCount須在一行內按照 letter 英文字母個數, blank 空格或回車…

Servlet 3.0異步處理可將服務器吞吐量提高十倍

Servlet是Java中處理服務器端邏輯的主要組件&#xff0c;新的3.0規范引入了一些非常有趣的功能&#xff0c;其中異步處理是最重要的功能之一。 可以利用異步處理來開發高度可伸縮的Web應用程序。 使用此功能可以有效地構建Web 2.0站點和AJAX應用程序。 我們的JCG合作伙伴之一To…

使用secureCRT連接VMware-Ubuntukylin虛擬機

使用SecureCRT連接VMware時總是提醒主機拒絕連接。這時可以使用sudo apt-get install openssh-server openssh-client&#xff0c;在主機上安裝ssh. 安裝成功后&#xff0c;可以連接到主機了。 如果顯示遠程主機拒絕連接。則可以使用如下方法。 VMware里面裝的是Ubuntukylin版本…

加載音頻Audio

var cameraAudio new Audio(); cameraAudio.src camera.wav;// 設置音頻對象的屬性,預加載視頻 var options_audio { preload : auto } for(var key in options_audio){ if(options_audio.hasOwnProperty(key) && (key in cameraAudio)){ cameraAudio[key] opti…

習題6-2 使用函數求特殊a串數列和 (20 分)

給定兩個均不超過9的正整數a和n&#xff0c;要求編寫函數求aaaaaa?aa?a&#xff08;n個a&#xff09;之和。 int fn( int a, int n ); int SumA( int a, int n );其中函數fn須返回的是n個a組成的數字&#xff1b;SumA返回要求的和。 我的代碼&#xff1a; int fn( int a, i…

Java中可怕的雙重檢查鎖定成語

本文討論的問題不是新問題&#xff0c;但即使是經驗豐富的開發人員也仍然很棘手。 單例模式是常見的編程習慣。 但是&#xff0c;當與多個線程一起使用時&#xff0c;必須進行某種類型的同步&#xff0c;以免破壞代碼。 Khangaonkar報告中的 JCG合作伙伴Manoj Khangaonkar在一篇…

國內有哪些好的刷題網站?

http://www.zhihu.com/question/25574458 Luau Lawrence&#xff0c;Data Mining 弱雞 / PhDNTU 溫夢強、石一帆、知乎用戶 等人贊同 - Welcome To PKU JudgeOnline 北京大學的Online Judge。POJ上面的題目有點老了&#xff0c;但好處是做的人多&#xff0c;經典算法題多&…

IE版本判斷

我們常常會在網頁的HTML里面看到形如[if lte IE 9]……[endif]的代碼&#xff0c;表示的是限定某些瀏覽器版本才能執行的語句&#xff0c;那么這些判斷語句的規則是什么呢&#xff1f;請看下文&#xff1a; <!--[if !IE]><!--> 除IE外都可識別 <!--<![endif]…

Js 流程控制

流程控制 順序、分支、循環 順序結構 代碼一行一行從上往下執行并解析 分支結構 if語句 switch語句 if語句 單分支 if(條件表達式){ //語句塊 } 含義&#xff1a;當條件表達式為真的時候就執行里面的語句塊 示例&#xff1a; 雙分支&#xff1a; if(條件表達式){ //語句塊1 }el…

習題6-3 使用函數輸出指定范圍內的完數 (20 分)

本題要求實現一個計算整數因子和的簡單函數&#xff0c;并利用其實現另一個函數&#xff0c;輸出兩正整數m和n&#xff08;0<m≤n≤10000&#xff09;之間的所有完數。所謂完數就是該數恰好等于除自身外的因子之和。例如&#xff1a;6123&#xff0c;其中1、2、3為6的因子。…

速覽Java 7 MethodHandle及其用法

由于Java的Reflection API&#xff0c;我們已經能夠在運行時檢查和更改程序執行。 特別是&#xff0c;我們可以在運行時觀察接口/類/方法和字段&#xff0c;而在編譯時不知道它們的名稱。 JDK 7為這種動態/運行時檢查引入了一個新的參與者&#xff0c;即方法句柄&#xff08;即…

習題6-4 使用函數輸出指定范圍內的Fibonacci數 (20 分)

本題要求實現一個計算Fibonacci數的簡單函數&#xff0c;并利用其實現另一個函數&#xff0c;輸出兩正整數m和n&#xff08;0<m≤n≤10000&#xff09;之間的所有Fibonacci數。所謂Fibonacci數列就是滿足任一項數字是前兩項的和&#xff08;最開始兩項均定義為1&#xff09;…

SmartGWT入門,提供出色的GWT界面

SmartGWT簡介 我最近開始使用SmartGWT &#xff0c;它是一個基于GWT的框架&#xff0c;該框架為您的應用程序UI提供了一個全面的小部件庫&#xff0c;并為服務器端的數據管理提供了幫助。 您可以在SmartGWT展示柜上查看其漂亮的功能。 我準備了一個簡短的“入門”指南&#xf…

Android OpenGL ES(四)----調整屏幕的寬高比

1.寬高比問題 我們現在相當熟悉這樣一個事實&#xff0c;在OpenGL里&#xff0c;我們要渲染的一切物體都要映射到X軸和Y軸上[-1&#xff0c;1]的范圍內&#xff0c;對于Z軸也一樣。這個范圍內的坐標被稱為歸一化設備坐標&#xff0c;其獨立于屏幕實際尺寸或形狀。 不幸的是&…

使用Spring AOP進行面向方面的編程

面向方面的編程&#xff08;AOP&#xff09;是指將輔助功能或支持功能與主程序的業務邏輯隔離開來的編程范例。 AOP是用于分離橫切關注點的有前途的技術&#xff0c;這在面向對象的編程中通常很難做到。 以此方式增加了應用程序的模塊化&#xff0c;并且維護變得非常容易。 橫切…

面試題24 二叉搜索樹的后序遍歷序列

題目描述 輸入一個整數數組&#xff0c;判斷該數組是不是某二叉搜索樹的后序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。1 class Solution {2 public:3 bool VerifySquenceOfBST(vector<int> sequence) {4 if (seque…