題解 看球泡妹子

2022-01-10 20:41:29 字數 1087 閱讀 4011

題目鏈結

有 \(n\) 只球隊, \(m\) 場比賽,有實力值 \(a_i\) 和帥哥數 \(b_i\) 。 \(m\) 場比賽的輸入格式為 \(p_i\)

\(q_i\) 。有一男一女,男生認為精彩度為兩比賽的實力乘積,女生認為是帥哥數之和。在女生認為的精彩度不少於 \(c\) 時,男生認為的精彩度最大為多少,且兩人最多能看 \(k\) 場比賽。

很簡單,二維費用 \(dp\) 。

設 \(dp[i][j][k]\) :列舉到第 \(i\) 場比賽,共看了 \(j\) 場比賽,女生認為精彩度為 \(k\) 時,男生認為的精彩度的最大值。

顯然,目標在 \(dp[m][k][c]\) 至 \(dp[m][k][sum]\) 之間,其中 \(sum\) 為女生最大精彩度。

也不難推出狀態轉移方程:

\(dp[i][j][k] = max(dp[i - 1][j][k], dp[i - 1][j - 1][k - b[p[i]] - b[q[i]]] + a[p[i]] * a[q[i]])\)

初始值為 \(dp[i][0][0]=0(0≤i≤m)\) ,其餘都為負無窮。

#include #include #include using namespace std;

void quick_read(int &n)

while(c >= '0' && c <= '9')

n *= op;

}const int maxn = 1e2 + 5;

const int maxm = 2e3 + 5;

int dp[maxn][maxn][maxm];

int a[maxn], b[maxn], p[maxn], q[maxn];

int n, m, k, c;

int sum;

void read()

}void dp()

} }int ans = -1;

for(int i = c; i <= sum; i++)

ans = max(ans, dp[m][k][i]);

printf("%d", ans);

}int main()

看球泡妹子

顯然的二維費用揹包。把小紅的當做體積,把能看的場數當做質量,小明的當做價值做揹包。因為我們要得到剛好體積為某個值,場數為某個值的價值,所以提前全面賦值為 inf。ac pragma gcc optimize ofast funroll all loops include define int lon...

P2416 泡芙 題解

當火星貓走過一條路之後,這條路就不能再走了 從這句話我們可以想出來,如果走過的這條路是橋,那麼火星貓就會再也無法走回去。那麼我們可以先求一遍邊雙並縮點。如果您不會求邊雙,您可以看這個雲剪貼簿。求邊雙的同時我們可以標記該邊雙內是否有有泡芙的邊。求出邊雙縮點後再建圖,由邊雙連通分量縮點的性質我們知道縮出...

牛客題霸 牛妹的蛋糕 C 題解 答案

眾所周知,牛妹非常喜歡吃蛋糕。第一天牛妹吃掉蛋糕總數三分之一 向下取整 多乙個,第二天又將剩下的蛋糕吃掉三分之一 向下取整 多乙個,以後每天吃掉前一天剩下的三分之一 向下取整 多乙個,到第n天準備吃的時候只剩下乙個蛋糕。牛妹想知道第一天開始吃的時候蛋糕一共有多少呢?題目問的是第一天吃的什麼,給的是吃...