【题解】284E. Coin Troubles(dp+图论建模)

题意就是要你跑一个完全背包,但是要求背包的方案中有个数相对大小的限制

考虑一个\(c_i<c_j\)的限制,就是一个\(c_i\)一定可以对应一个\(c_j\),一个常见的钦定手法是,直接把\(c_j\)的权值捆绑在\(c_i\)上,实现选一个\(c_i\)必选一个\(c_j\)。但是题目里是大于号怎么办,那就直接在背包中钦定先拿一个\(c_j\)即可。

现在问题就是维护这一个捆绑的关系,我们可以直接根据差分约束的那种方法建模出来,然后判断整个图有没有环来判断是否无解。由于题目里保证一些很优美的性质(一个点的出入度各\(\le1\))所以不需要真的拓扑排序。直接每个点记录一下比自己小的点,从每个点跑\(dfs\)就好了,然后假如跑\(dfs\)的时候发现出现了环,直接exit即可。

考虑一下\(<\)的传递性,比如样例1里面的这种情况\(c_3>c_4>c_2\),我们要求钦定两个\(3\),一个\(4\),直接通过\(dfs\)记录一下就好。

很坑的地方就是可能爆int之类的,所以要判断一下....由于我很懒所以我直接瞎几把判断的

//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>using namespace std;  typedef long long ll;
inline int qr(){register int ret=0,f=0;register char c=getchar();while(c<48||c>57)f|=c==45,c=getchar();while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();return f?-ret:ret;
}const int maxn=1e5+5;
const int mod=1e9+7;
int dp[maxn];
int data[301];
int sav[301];
int le[301];
int n,m,k,init;
int in[301];int dfs2(const int&now,const int&d){in[now]=1;register int ret=0;init+=1ll*sav[now]*d;if(init<0||init>k) puts("0"),exit(0);if(in[le[now]]) puts("0"),exit(0);if(le[now]) ret=dfs2(le[now],1);in[now]=0;return ret+sav[now];
}int main(){n=qr(); m=qr(); k=qr();for(register int t=1;t<=n;++t) sav[t]=data[t]=qr();for(register int t=1,t1,t2;t<=m;++t){t1=qr(); t2=qr();le[t2]=t1;}for(register int t=1;t<=n;++t) if(le[t]) data[t]=dfs2(t,0);//,putchar('\n');for(register int t=1;t<=n;++t) if(data[t]<0) puts("0"),exit(0);if(init<maxn) dp[init]=1;for(register int t0=1;t0<=n;++t0)for(register int t=init+data[t0];t<=k;++t)dp[t]=(dp[t]+dp[t-data[t0]])%mod;printf("%d\n",dp[k]);return 0;
}

转载于:https://www.cnblogs.com/winlere/p/11419321.html

【题解】284E. Coin Troubles(dp+图论建模)相关推荐

  1. 20220104[动态规划 图论 建模][衢州市赛2017]环游衢州

    20220104[动态规划 图论 建模][衢州市赛2017]环游衢州 题目描述 Jason 想要带着他新叫的朋友环游 QZ,于是他把 QZ 划分成了 n 个地方,已知这 n 个地方由 m 条双向边相连 ...

  2. codeforces 283C Coin Troubles(背包DP)

    题目链接:http://codeforces.com/problemset/problem/283/C 题意:给定n件物品以及每件的重量(每种物品无限多).已知选取了一些物品的总重量为m,(x1,x2 ...

  3. BBQ Hard dp + 组合数学 + 建模

    传送门 文章目录 题意: 思路: 题意: 有nnn组物品,每组有aia_iai​个肉和bib_ibi​个菜,你可以选择两组物品让后将肉和菜其串在一根串上,问有多少种不同的串法. 两种方法不同当且仅当选 ...

  4. codeforces1497 D. Geniue(dp+图论)

    D. Geniue Frozen_Guardian题解 Implicit_总结 首先把此序列看作一个完全图,然后按照边权从小到大的顺序枚举边. 如何按照边权从小到大枚举边? 下面考虑形如边(a,b)( ...

  5. zoj1134 Strategic Game(DP/图论)

    /*  简单的树形DP:利用搜索正向求解.       0的孩子必须是1,1的孩子任意,取最小的. */ View Code 1 #include <stdio.h> 2 #include ...

  6. QBXT 2018春季DP图论班 2018.4.29 --- 图论基础

    *钟皓曦(长者.钟百万)老师授课* 图:由边集E和点集V构成. 有向图:含有至少一条有向边的图. 无向图:只含有无向边的图. →例:左图是有向图,因为其含有有向边. 右图是有向图.虽然无向边相当于两条 ...

  7. [NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)

    达哥送分给我我都不要,感觉自己挺牛批. $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=\sum C_n^i \times C_i^{\frac{i}{2}} \t ...

  8. BZOJ2017[USACO 2009 Nov Silver 1.A Coin Game]——DP+博弈论

    题目描述 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为"Xoinc"的两人硬币游戏. 初始时,一个有N(5 <= N <= 2,000)枚硬币的堆栈放在地上,从堆 ...

  9. 清北学堂dp图论营游记day4

    依然zhx讲. 讲了概率与期望: 期望:事件结果的平均大小.记作E(x). E(x)=每种结果的大小与其概率的乘积的和. 例如,记掷一枚骰子的点数为x E(x)=1*(1/6)+2*(1/6)+3*( ...

最新文章

  1. 发起一个ajax请求,发送ajax请求
  2. java xpath 命名空间_【转】玩转 XPath 和缺省命名空间(Default Namespaces)
  3. Android应用中的动画详细使用教程
  4. 可怕的DefaultAbstractHelperImpl
  5. 【Servlet】过滤器技术
  6. jQuery和vue 设置ajax全局请求
  7. 如何用python计算营业额_如何用Python进行RFM分析
  8. Java RMI 服务易受 SSRF 攻击
  9. db2 c语言,DB2数据库安全(二)——身份认证
  10. swift继承与重载
  11. 2018百度之星程序设计大赛初赛B——1004p1m2
  12. LNK1169 LNK2005错误
  13. 985硕毕业,面试13家企业,拿7个大厂offer,回顾面试总结
  14. fs.readFileSync 引入路径错误
  15. Linux系统的特点有哪些
  16. NAACL 2022事件相关(事件抽取、事件关系抽取、事件预测等)论文汇总
  17. Android中的ShareSDK学习
  18. IEEE 802.11 无线局域网络 (Wireless LAN)
  19. php sequelize,关于javascript:eggjs-sequelize-的常用方法总结
  20. 人生就是一个完整的项目

热门文章

  1. 明年债券收益率有望延续下行的趋势
  2. Win10多台电脑时间自动同步
  3. 算法:十六进制最大数
  4. C语言(一):C语言概述介绍
  5. vue引入TweenMax.js
  6. python金融大数据分析师工资待遇_请问数据分析师这个工作怎么样,是否值得成为努力方向?...
  7. 每个程序员必须掌握的常用英语词汇
  8. NR 5G 无线帧与子载波
  9. 语音识别_ML-KWS-for-MCU_资料整理
  10. linux d开头是什么文件夹,linux文件权限,p开头/d开头/l开头