当前位置: 首页 > news >正文

P4877 [USACO14FEB] Cow Decathlon G

题解:P4877 [USACO14MAR] Sabotage G

题目大意

\(n\) 天,每天可以安排一个不同的奶牛挤奶。每头奶牛在第 \(i\) 天有特定的产量值,且在第 \(i\) 天结束时可能有多个奖励条件,求能获得的最大总产量。

题意分析

像这种没有思路的题目,先看一下 DP 可不可行,再观察到数据范围 \(n \le 20\),不难想到状压,于是:

\(f_{i,mask}\) 表示前 \(i\) 天,已经挤过奶的奶牛集合为 \(mask\) 时的最大产量,接着考虑怎么转移。

状态转移

  1. 安排奶牛:对于第 \(i\) 天,从所有未挤奶的奶牛中选择一头,更新状态:

    \[f_{i,mask+2^j} = \max(f_{i,mask+2^j}, f_{i-1,mask}+wis_{j,i}) \]

    其中 \(wis_{j,i}\) 表示奶牛 \(j\) 在第 \(i\) 天的产量。

  2. 奖励结算:在第 \(i\) 天结束时,根据当前产量 \(f_{i,mask}\) 结算奖励。
    奖励条件按所需产量降序排序,依次判断并累加奖励值。

时间复杂度

状态数:\(O(n \cdot 2^n)\)。转移复杂度:\(O(n)\),总复杂度:\(O(n \cdot 2^n)\),还有一点小常数。在 \(n \le 20\) 时可接受。

CODE

#include<bits/stdc++.h>
#define wk(x) write(x),putchar(' ')
#define wh(x) write(x),putchar('\n')
#define N 21
#define M 1100005using namespace std;
int n,m,k,ans;
int wis[N][N],f[N][M];struct Q{int x,y;bool operator<(const Q&A)const{return A.x<x;}
};vector<Q> kis[N];void read(int &x){x=0;int ff=1;char ty;ty=getchar();while(!(ty>='0'&&ty<='9')){if(ty=='-') ff=-1;ty=getchar();}while(ty>='0'&&ty<='9')x=(x<<3)+(x<<1)+ty-'0',ty=getchar();x*=ff;return;
}void write(int x){if(x==0){putchar('0');return;}if(x<0){x=-x;putchar('-');}char asd[201];int ip=0;while(x) asd[++ip]=x%10+'0',x/=10;for(int i=ip;i>=1;i--) putchar(asd[i]);return;
}int Get(int x,int y=0){while(x){if(x&1) y++;x>>=1;}return y;
}signed main(){read(n),read(m);for(int i=1,x,y,z;i<=m;i++){read(x),read(y),read(z);kis[x].push_back((Q){y,z});}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){read(wis[i][j]);}}for(int i=1;i<=n;i++) sort(kis[i].begin(),kis[i].end());//按p排序肯定最优,这点需要注意!for(int i=1;i<=n;i++){for(int p=0;p<=(1<<n)-1;p++){if(Get(p)!=i-1) continue;//避免无效状态for(int j=1;j<=n;j++){if((p|(1<<(j-1)))==p) continue;//重复f[i][p|(1<<(j-1))]=max(f[i][p|(1<<(j-1))],f[i-1][p]+wis[j][i]);//转移ans=max(f[i][p|(1<<(j-1))],ans);//取最大值}}for(int p=0;p<=(1<<n)-1;p++){if(Get(p)!=i) continue;//避免无效状态,同上for(int j=0;j<(int)kis[i].size();j++){if(f[i][p]>=kis[i][j].x) f[i][p]+=kis[i][j].y,ans=max(f[i][p],ans);//计算奖励分}}}wh(ans);return 0;
}
http://www.jsqmd.com/news/697123/

相关文章:

  • SAM-Track:多模态交互与自动跟踪,解锁视频分割新范式
  • 抖音内容批量下载终极指南:免费开源工具解决无水印保存难题
  • 别再只用原生Swiper了!手把手教你用WXML+CSS+JS实现微信小程序堆叠卡片轮播
  • C++26反射编译期加速实战:如何将模板元编程吞吐量提升470%?实测Clang 19.0.1+MSVC v144数据
  • 如何一键捕获完整网页截图:Chrome扩展终极指南
  • 2026 年肇庆物流线路推荐榜:高效专线与靠谱运力,企业发货更省心 - 品牌企业推荐师(官方)
  • 告别死记硬背:用‘红绿灯’和‘排队’模型秒懂AXI的Outstanding与乱序
  • 5分钟掌握百度网盘提取码智能获取:baidupankey终极使用指南
  • 从10万同屏到百万同屏:GPU Spine动画在2D割草游戏中的极限渲染实践
  • 避坑指南:在Windows 11上安装face_recognition和dlib的完整流程(2024最新)
  • 高效解密网易云音乐NCM文件:ncmdumpGUI专业转换工具完整指南
  • Python3基础语法知识点总结
  • 瑞祥商联卡回收价格透明吗?靠谱的线上回收平台推荐 - 团团收购物卡回收
  • 给硬件工程师的DRAM故障排查手册:从SAF到CF,手把手教你定位内存条上的‘坏点’
  • 9个 Python 库,摆脱重复手动操作
  • 购物卡闲置?教你高效回收大润发购物卡! - 团团收购物卡回收
  • 百度网盘直链解析:告别龟速下载的终极解决方案
  • 探讨野外供电的稳定解决策略是什么,易达光电品牌推荐哪家 - 工业品网
  • PyQt5:利用QGraphicsView实现图像像素坐标的精准拾取与动态追踪
  • biliTickerBuy:B站会员购抢票终极解决方案,告别手速焦虑的完整指南
  • 2026 年跨境物流公司权威推荐榜:全球出海优选,甄选专业物流臻品 - 品牌企业推荐师(官方)
  • 阿里云PolarStore数据库存储系统架构与优化实践
  • 使用ezdxf实现DXF图纸批量处理的工业级解决方案
  • 2026年赣州汽车隐私膜贴膜品牌推荐,性价比超高 - 工业品牌热点
  • 工单分类越来越细,为什么ITSM系统反而更难用?
  • Go语言的context.WithValue设计
  • STM32 HAL库实战:用CAN总线实现按键控制上位机通信(附完整工程)
  • 2026佛山AI搜索GEO优化公司实战盘点 - 品牌企业推荐师(官方)
  • 机器学习过拟合的本质与防范策略
  • 量子张量网络与多元高斯函数制备技术解析