洛谷题目链接:看球泡妹子

题目背景

2014年巴西世界杯开幕了,现在满城皆是世界杯,商家们利用它大赚一笔,小明和小红也借此机会增进感情。

题目描述

本届世界杯共有N支球队,M场比赛。男球迷小明喜欢看比赛,女球迷小红喜欢看帅哥。每支球队在小明眼里的实力值为Ai,在小红眼里的帅哥数量为Bi。

每场比赛有两个球队对抗,它们的编号分别是Pi和Qi。小明认为一场比赛的精彩度等于两队实力的乘积,小红则认为是两队帅哥数量之和。

由于体力的限制,他们最多只能看K场比赛。当然,只要看比赛,两个人一定会一起看。小明作为男生,理应迁就一下女生,所以,请你写一个程序,求出小红看到比赛的精彩度总和不小于C的情况下,小明看到比赛的精彩度的最大总和。

输入输出格式

输入格式:

第1行,4个正整数N,M,K,C。

第2行,N个空格隔开的正整数Ai。

第3行,N个空格隔开的正整数Bi。

之后M行,每行两个正整数Pi,Qi。

输出格式:

一行,一个正整数表示小明看到比赛的精彩度的最大总和。如果无论如何都无法满足小红的要求,输出-1.

输入输出样例

输入样例#1:

4 3 2 5

2 2 1 3

1 1 1 2

1 2

2 3

3 4

输出样例#1:

7

说明

对于20%数据,N,M,K<=5。

对于全部数据,N<=100,K<=M<=100,Ai,Bi<=10,C<=1000.


一句话题意: n个队伍间有比赛, A,B两个参数描述队伍,有m场比赛,看一场\(x\)和\(y\)的比赛小明可以获得\(A_x*A_y\)的精彩度,小红可以获得\(B_x+B_y\)的精彩度. 问看k场的情况下,要使小红得到的精彩度大于c,小明可以得到的最大精彩度是多少.


题解: 因为\(B_x+B_y\)并不大,最多也只有2000,所以可以考虑用DP将小红得到的精彩度作为背包的费用存下来,那么选k场也就可以看成是一个01背包.那么可以定义状态\(f[i][j][k]\)表示选到了第\(j\)场比赛,看了\(i\)场,小红得到的精彩度为\(k\). 可以得到状态转移方程:

\[f[i][j][k] = max(f[i-1][j-1][k-v]+w, f[i][j][k])
\]

其中k为枚举的精彩度,v为看这次比赛小红可以得到的精彩度,w为小明可以得到的精彩度.

然后注意一下赋初始值的问题就可以了.

// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
const int N=100+5; int n, m, k, c, ans = -1;
int f[N][N][2000+5];
//in the front i_th games
//watched j games
//the level of the game is l struct team{
int a, b;
}t[N]; struct game{
int x, y, v, w;
}g[N]; int main(){
//freopen("data.in","r",stdin);
cin >> n >> m >> k >> c;
memset(f,128,sizeof(f)); f[0][0][0] = 0;
for(int i=1;i<=m;i++) f[i][0][0] = 0;
for(int i=1;i<=n;i++) cin >> t[i].a;
for(int i=1;i<=n;i++) cin >> t[i].b;
for(int i=1;i<=m;i++){
cin >> g[i].x >> g[i].y;
g[i].w = t[g[i].x].a*t[g[i].y].a;
g[i].v = t[g[i].x].b+t[g[i].y].b;
}
for(int i=1;i<=k;i++)//the chances to see the game
for(int j=i;j<=m;j++)//game
for(int l=2000;l>=0;l--){//the level of the game
f[j][i][l] = max(f[j][i][l], f[j-1][i][l]);
if(l >= g[j].v) f[j][i][l] = max(f[j][i][l], f[j-1][i-1][l-g[j].v]+g[j].w);
if(l >= c) ans = max(ans, f[j][i][l]);
}
printf("%d\n",ans);
return 0;
}

状态定义的比较奇葩不要见怪哈..

[洛谷P2113] 看球泡妹子的更多相关文章

  1. luogu P2113 看球泡妹子

    2333 这么水的蓝题 f[i][j] 表示看了i场比赛,小♀红的什么东西为j时小♂明的什么值 强行压维蛤蛤 剩下的转移很简单(注意i的循环顺序从后往前,01背包) (具体见代码) #include& ...

  2. 背包DP【洛谷P2113】 看球泡妹子

    P2113 看球泡妹子 题目背景 2014年巴西世界杯开幕了,现在满城皆是世界杯,商家们利用它大赚一笔,小明和小红也借此机会增进感情. 题目描述 本届世界杯共有N支球队,M场比赛.男球迷小明喜欢看比赛 ...

  3. 【洛谷2113】看球泡妹子 DP背包

    看球泡妹子 题目背景 2014年巴西世界杯开幕了,现在满城皆是世界杯,商家们利用它大赚一笔,小明和小红也借此机会增进感情. 题目描述 本届世界杯共有\(N\)支球队,\(M\)场比赛.男球迷小明喜欢看 ...

  4. 洛谷 [P2765] 魔术球问题

    贪心做法 每次尽可能选择已经放过球的柱子 #include <iostream> #include <cstdio> #include <cstring> #inc ...

  5. 洛谷P2765魔术球问题 最小路径覆盖

    https://www.luogu.org/problemnew/show/P2765 看到这一题第一眼想到:这不是二分最大流吗,后来发现还有一种更快的方法. 首先如果知道要放多少个球求最少的柱子,很 ...

  6. 洛谷 P2765 魔术球问题 解题报告

    P2765 魔术球问题 题目描述 问题描述: 假设有\(n\)根柱子,现要按下述规则在这\(n\)根柱子中依次放入编号为\(1,2,3,\dots\)的球. \((1)\) 每次只能在某根柱子的最上面 ...

  7. 洛谷P2765 魔术球问题(最大流)

    传送门 %%%KSkun大佬 话说明明是网络流……这题竟然还有打表找规律和纯贪心AC的……都是神犇啊…… 来说一下如何建图.首先把每一个点拆成$X_i$和$Y_i$,然后$S$向$X_i$连一条容量为 ...

  8. 洛谷P2765 魔术球问题(贪心 最大流)

    题意 已经很简洁了吧. 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全 ...

  9. 通过洛谷P2639看01背包

    题目描述 Bessie像她的诸多姊妹一样,因为从Farmer John的草地吃了太多美味的草而长出了太多的赘肉.所以FJ将她置于一个及其严格的节食计划之中.她每天不能吃多过H ( <= H &l ...

随机推荐

  1. Android开发——View动画、帧动画和属性动画详解

    0. 前言   Android动画是面试的时候经常被问到的话题.我们都知道Android动画分为三类:View动画.帧动画和属性动画. 先对这三种动画做一个概述: View动画是一种渐进式动画,通过图 ...

  2. 初步学习pg_control文件之三

    接前文,初步学习pg_control文件之二 继续学习: 研究 DBState,先研究 DB_IN_PRODUCTION ,看它如何出现: 它出现在启动Postmaster时运行的函数处: /* * ...

  3. IAR工程名修改

    修改.dep..ewd..ewp..eww四个文件的文件名 删除.ewt文件(如果存在) 记事本打开.eww文件,修改<path></path>间的.ewp文件名 打开工程,打 ...

  4. leetcode笔记--6 Add Digits

    question: Given a non-negative integer num, repeatedly add all its digits until the result has only ...

  5. 【廖雪峰老师python教程】——错误和调试

    错误处理 try...except...finally...机制 try: print('try...') r = 10 / 0 print('result:', r) except ZeroDivi ...

  6. OpenPAI:大规模人工智能集群管理平台介绍及任务提交指南

    产品渊源: 随着人工智能技术的快速发展,各种深度学习框架层出不穷,为了提高效率,更好地让人工智能快速落地,很多企业都很关注深度学习训练的平台化问题.例如,如何提升GPU等硬件资源的利用率?如何节省硬件 ...

  7. Linux C++线程池实例

    想做一个多线程服务器测试程序,因此参考了github的一些实例,然后自己动手写了类似的代码来加深理解. 目前了解的线程池实现有2种思路: 第一种: 主进程创建一定数量的线程,并将其全部挂起,此时线程状 ...

  8. 总结const

    int b; const int  *a=&b; int const * a=&b; int * const a =&b; const int *const a=&b; ...

  9. PokeCats开发者日志(五)

      现在是PokeCats游戏开发的第八天的上午,来记录一下将PokeCats上传到360移动开放平台的过程.   首先点创建游戏.   会弹出这个东东.   个人只能创建免费游戏啊,TAT.算了,反 ...

  10. delphi中写SQL语句中变量的注意事项

    1.procedure TForm1.btn1Click(Sender: TObject); var   s: String; begin   S := 'select * from TMarketI ...