鱼C论坛

 找回密码
 立即注册
查看: 2560|回复: 4

[技术交流] 大家求的USACO铜 T2题解

[复制链接]
发表于 2023-2-3 08:43:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ExiaGN001 于 2023-2-3 08:43 编辑

数位dp即可。

题目:
  1. 2.空调
  2. Farmer John 的农场经历了有史以来最热的夏天,他需要一种方法来为他的奶牛降温。因此,他决定投资购买一些空调。

  3. 农夫约翰的N只奶牛(1≤N≤ 20) 住在一个谷仓里,谷仓里有一系列连续的位置,编号1 到100.第i头牛占据了从s[ i]开始直到t[ i]的所有位置. 不同奶牛占据的位置都是相互不相交的。
  4. 奶牛有不同的冷却要求。第i头牛必须获得c[ i]的冷却量, 意思是牛占据的每个位置必须至少降低其温度c[i ]个单位。

  5. 谷仓有m台空调,标有1 ~m的编号 (1≤M≤ 10). 第i台空调的运作成本是m[ i](1≤ m[i ]≤ 1000) 。第i台空调可以使a[ i]到b [i ]的区域的温度降低p[ i]度(1≤ p[ i]≤10^6).
  6. 空调覆盖的区域可能会重叠。

  7. 经营农场绝非易事,因此 FJ 的预算很紧。
  8. 请确定他至少需要花多少钱才能让他所有的奶牛都感到舒适。
  9. 可以保证,如果 FJ 使用他所有的空调,那么所有的奶牛都会感到舒适。

  10. 输入格式(输入来自终端/stdin):
  11. 1行输入 n,m.
  12. 2~n+1行描述奶牛。第i+1行的三个数分别是s[ i],t[ i],c[ i]的值。
  13. n+2~n+m+1行描述空调。第i+n+1行的四个数分别是a[ i],b[ i],p[ i],m[ i]的值。
  14. 除了两个输入样例之外的其他样例都满足m=10。

  15. 输出格式(打印输出到终端/stdout):
  16. 输出一个整数,告诉 FJ 需要花费最少的钱来运行足够的空调来满足他所有的奶牛(在上面列出的条件下)。

  17. 样例输入:
  18. 2 4
  19. 1 5 2
  20. 7 9 3
  21. 2 9 2 3
  22. 1 6 2 8
  23. 1 2 4 2
  24. 6 9 1 5
  25. 复制代码

  26. 样例输出:
  27. 10
  28. 复制代码

  29. 一种花费最少的可能解决方案是选择那些可以冷却这些区域:[2,9],[1,2], 和[6,9],成本为3+2+5=10.

  30. 题目提供者:Aryansh Shrivastava 和 Eric Hsu,感谢他们的贡献。
复制代码




代码:
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n,m;
  4. int s[25],t[25],c[25];
  5. int m2[15],a[15],b[15],p[15];
  6. int ans=2147483647;
  7. bool cross(int al,int ar,int bl,int br)
  8. {
  9.     if(ar<bl || br<al)//前不见古人,后不见来者
  10.         return 0;
  11.     else return 1;

  12. }
  13. void check(int idx)
  14. {
  15.     int ch[15];
  16.     int tmpc[25];
  17.     for(int i=0;i<n;i++)
  18.         tmpc[i]=c[i];
  19.     int tmpans=0;
  20.     for(int i=1;i<=m;i++)
  21.     {
  22.         ch[i-1]=(idx>>(n-i))%2;
  23.     }
  24.     for(int i=0;i<m;i++)
  25.     {
  26.         if(ch[i])
  27.         {
  28.             tmpans+=m2[i];
  29.             for(int j=0;j<n;j++)
  30.             {
  31.                 if(cross(s[i],t[i],a[i],b[i]))
  32.                 {
  33.                     tmpc[i]-=p[i];
  34.                 }
  35.             }
  36.         }
  37.     }
  38.     bool flg=1;
  39.     for(int i=0;i<n;i++)
  40.     {
  41.         if(tmpc[i]>0)return ;
  42.     }
  43.     ans=min(ans,tmpans);
  44.     return ;
  45. }

  46. //m=10可以递归做/数位动态规划
  47. int main()
  48. {
  49.     cin>>n>>m;
  50.     for(int i=0;i<n;i++)cin>>s[i]>>t[i]>>c[i];
  51.     for(int i=0;i<m;i++)cin>>a[i]>>b[i]>>p[i]>>m2[i];
  52.     int siz=pow(2,m);//不超过1024

  53.     for(int i=0;i<siz;i++)
  54.     {
  55.         check(i);
  56.     }
  57.     cout<<ans;
  58. }
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zhangjinxuan + 1 + 1 我算了一下dfs的复杂度,不会超,我就保dfs

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-3 10:21:33 | 显示全部楼层
牛牛

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zhangjinxuan + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-6 19:12:45 | 显示全部楼层
老实用深搜吧,毕竟 210 也就只有 1024 左右
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-2-6 19:28:24 | 显示全部楼层
zhangjinxuan 发表于 2023-2-6 19:12
老实用深搜吧,毕竟 2 也就只有 1024 左右

对滴,数位dp和DFS都对数据量有要求

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zhangjinxuan + 1 + 1 我怕有问题,毕竟学的不好

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-6 19:39:23 | 显示全部楼层
ExiaGN001 发表于 2023-2-6 19:28
对滴,数位dp和DFS都对数据量有要求

我怕出事
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 17:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表