题目描述

约翰有 N 头奶牛,组成了一直队伍参加全能比赛。比赛一共有 N 项,每头奶牛必须参加一项比
赛,每项比赛也必须有一头奶牛参加。任何一头奶牛可以胜任任何一项比赛,但得分不一样。如果第
i 头奶牛参加第 j 项比赛,在比赛结束的时候,可以为团体总分增加 S i,j 。
比赛是按照顺序依次进行的。除了上述获得分数的方法之外,还有 B 种奖励分。获得奖励的方法
是在前几项比赛里获得足够的分数。具体来说,第 i 项奖励会在第 K i 项比赛结束的时候检查,如果
当时的总分大于或等于 P i ,奶牛们就可以立即获得额外的 A i 分。如果有多项奖励在同一时刻检查,
奶牛可以自由安排检查和加分的顺序。请问约翰应该如何安排奶牛参加比赛,才能让它们获得最高的
分数? 

输入

• 第一行:两个整数 N 和 B,1 ≤ N ≤ 20, 1 ≤ B ≤ 20
• 第二行到第 B + 1 行:第 i + 1 行有三个整数 K i ,P i 和 A i ,1 ≤ K i ≤ N, 1 ≤ P i ≤ 40000,
1 ≤ A i ≤ 1000
• 第 B + 2 行到第 B + N + 1 行:第 i + B + 1 行有 N 个整数,代表 S i,1 到 S i,N ,对每个
1 ≤ j ≤ N, 1 ≤ S i,j ≤ 1000

输出

• 单个整数:表示奶牛们可以获得的最大得分

样例输入

3 1 2 7 6 5 1 7 2 2 4 4 2 1

样例输出

17

提示

第一项比赛由第一头奶牛参加,第二项比赛
由第三头奶牛参加,第三项比赛由第二头奶牛参加
题解:
n<=20 ->状压DP
然后定义F[i]表示i状态的奶牛,设now为i中1的数量,参加前now场比赛的最大得分
至于额外分这个东西,我把与比赛a有关的额外分都存在一个vector里 然后贪心 按pi从小到大排序
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<vector>
 6 using namespace std;
 7 const int N=20;
 8 struct node{
 9     int p,add;
10 };
11 vector<node>q[N+5];
12 int s[N+5][N+5],F[1<<N];
13 bool cmp(const node &p,const node &q){return p.p<q.p;}
14 int getday(int x)
15 {
16     int cnt=0;
17     while(x)
18     {
19         cnt++;
20         x-=(x&(-x));
21     }
22     return cnt;
23 }
24 int main()
25 {
26     int n,m,x,y,z;
27     scanf("%d%d",&n,&m);
28     for(int i=1;i<=m;i++)
29     {
30         scanf("%d%d%d",&x,&y,&z);
31         q[x].push_back((node){y,z});
32     }
33     for(int i=1;i<=n;i++)sort(q[i].begin(),q[i].end(),cmp);
34     for(int i=1;i<=n;i++)
35     for(int j=1;j<=n;j++)
36     scanf("%d",&s[i][j]);
37     int mk=(1<<n)-1,now,tmp;
38     for(int i=0;i<mk;i++)
39     {
40         now=getday(i);
41         for(int j=1;j<=n;j++)
42         {
43             if((1<<(j-1))&i)continue;
44             tmp=F[i]+s[j][now+1];
45             for(int k=0,sz=q[now+1].size();k<sz;k++)
46             if(tmp>=q[now+1][k].p)tmp+=q[now+1][k].add;
47             F[i|(1<<(j-1))]=max(F[i|(1<<(j-1))],tmp);
48         }
49     }
50     printf("%d",F[mk]);
51     return 0;
52 }

转载于:https://www.cnblogs.com/Yuzao/p/7002489.html

【USACO Feb 2014】Cow Decathlon相关推荐

  1. 堆+贪心——nkoj1587【Usaco Nov07 Gold】分配防晒霜

    [Usaco Nov07 Gold]分配防晒霜 Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在 ...

  2. 【清华集训2014】Sum)(类欧几里得算法)

    [清华集训2014]Sum 然后本质上我们需要求解的就是那个带根号式子的奇偶性,然后我们发现这个式子很像是类欧几里得算法,求解一个斜率为无理数直线下的整点个数,然后我们直接对于一般形式求解,那么就是每 ...

  3. 【USACO题库】3.4.4 Raucous Rockers“破锣摇滚”乐队 题解

    [USACO题库]3.4.4 Raucous Rockers"破锣摇滚"乐队  题解 你刚刚继承了流行的"破锣摇滚"乐队录制的尚未发表的N(1 <= N ...

  4. 【清华集训 2014】玛里苟斯(组合计数 + 线性基)

    题目链接:[清华集训 2014]玛里苟斯 推荐博客:[BZOJ 3811]玛里苟斯:线性基(详细证明) 首先想到将kkk分类讨论. k=1" role="presentation& ...

  5. 【USACO题库】1.2.1 Milking Cows挤牛奶

    一开始认为过不了,后来交就AC了. 1007. [USACO题库]1.2.1 Milking Cows挤牛奶 (File IO): input:milk.in output:milk.out 题目描述 ...

  6. 【USACO题库】1.4.2 The Clocks时钟.TJ

    标题的简介: [USACO题库]1.4.2 The Clocks--Tj https://jzoj.net/junior/#contest/show/1232/11(下文题目描述还是原地址清楚) 考虑 ...

  7. 洛谷 P2676 【USACO 07 DEC】Bookshelf B

    [题目描述] Farmer John最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了.现在,只有书架的顶上还留有一点空间. 所有N(1 <= N ...

  8. 【BZOJ1572】【usaco 2009 open】工作安排job

    [问题描述] Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单位时间(! ...

  9. 【USACO 2012 Open】Running Laps(树状数组)

    53 奶牛赛跑 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑, 奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈之后, ...

最新文章

  1. 快速打开unity manual的方式
  2. 如何找到Fiori Launchpad tile所属的catalog id
  3. Java EE陷阱#1:忽略@Singleton的默认锁定
  4. Simulink之交流调压电路
  5. Python基础知识学习笔记——Matplotlib绘图
  6. linux下C结构体初始化
  7. mysql自连接_MySQL自连接
  8. iOS中如何添加自定义的字体库
  9. Android 中 View的类关系图
  10. CopyU!v2 已经收录到腾讯软件管家!
  11. Java项目源码下载S2SH基于java的保险业务管理系统
  12. xlsxwriter设置Excel的表格边框
  13. 一文彻底理解卡诺图化简算法
  14. Image Tampering Detection via Semantic Segmentation Network
  15. 跟我一起水疗的哥俩儿,其实挺猛的!
  16. RDD与MapReduce对比
  17. css 使用 :placeholder-shown 实现MaterialDesign风格的交互
  18. Java 杨辉三角
  19. 对CreateCompatibleDC的粗浅认识
  20. Unity与Android Studio互相调用

热门文章

  1. 深度ip转换器手机版app_手机大师智能管家app下载-手机大师智能管家app官网版 v1.0.0...
  2. java 导出excel 例子_java导出Excel例子
  3. Vue移动端项目——字体图标的使用
  4. 使用RNN预测文档归属作者
  5. LeetCode 286. 墙与门(BFS)
  6. LeetCode 1186. 删除一次得到子数组最大和(DP)
  7. LintCode 125. 背包问题 II(DP)
  8. LeetCode 942. 增减字符串匹配
  9. 数据库实例:用户注册
  10. 转义字符简析及注意事项