zoukankan      html  css  js  c++  java
  • [题解] 看球泡妹子

    前言

    题目链接

    题意

    (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)) ,其余都为负无穷。

    C++代码

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    void Quick_Read(int &N) {
    	N = 0;
    	char c = getchar();
    	int op = 1;
    	while(c < '0' || c > '9') {
    		if(op == '-')
    			op = -1;
    		c = getchar();
    	}
    	while(c >= '0' && c <= '9') {
    		N = (N << 1) + (N << 3) + c - 48;
    		c = getchar();
    	}
    	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() {
    	Quick_Read(n);
    	Quick_Read(m);
    	Quick_Read(k);
    	Quick_Read(c);
    	for(int i = 1; i <= n; i++)
    		Quick_Read(A[i]);
    	for(int i = 1; i <= n; i++)
    		Quick_Read(B[i]);
    	for(int i = 1; i <= m; i++) {
    		Quick_Read(P[i]);
    		Quick_Read(Q[i]);
    		sum += B[P[i]] + B[Q[i]];
    	}
    }
    void DP() {
    	memset(dp, 128, sizeof(dp));
    	for(int i = 0; i <= m; i++)
    		dp[i][0][0] = 0;
    	for(int i = 1; i <= m; i++) {
    		for(int l = 1; l <= i; l++) {
    			for(int j = 0; j <= sum; j++) {
    				dp[i][l][j] = max(dp[i][l][j], dp[i - 1][l][j]);
    				if(j - B[P[i]] - B[Q[i]] >= 0)
    					dp[i][l][j] = max(dp[i - 1][l][j], dp[i - 1][l - 1][j - B[P[i]] - B[Q[i]]] + A[P[i]] * A[Q[i]]);
    			}
    		}
    	}
    	int ans = -1;
    	for(int i = c; i <= sum; i++)
    		ans = max(ans, dp[m][k][i]);
    	printf("%d", ans);
    }
    int main() {
    	Read();
    	DP();
    	return 0;
    }
    
  • 相关阅读:
    娃娃机 解题报告
    ecshop
    多字节字符串 函数
    电商中设置满包邮,满减等促销搞活动;电商平台同步到第三方,日志记录
    PHP文件操作
    apache重写字段详细说明
    httpc服务器错误类型大全
    正则入门简易
    php100 编程小技巧
    memcache
  • 原文地址:https://www.cnblogs.com/C202202chenkelin/p/14216057.html
Copyright © 2011-2022 走看看