【题解】284E. Coin Troubles(dp+图论建模)
【题解】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+图论建模)相关推荐
- 20220104[动态规划 图论 建模][衢州市赛2017]环游衢州
20220104[动态规划 图论 建模][衢州市赛2017]环游衢州 题目描述 Jason 想要带着他新叫的朋友环游 QZ,于是他把 QZ 划分成了 n 个地方,已知这 n 个地方由 m 条双向边相连 ...
- codeforces 283C Coin Troubles(背包DP)
题目链接:http://codeforces.com/problemset/problem/283/C 题意:给定n件物品以及每件的重量(每种物品无限多).已知选取了一些物品的总重量为m,(x1,x2 ...
- BBQ Hard dp + 组合数学 + 建模
传送门 文章目录 题意: 思路: 题意: 有nnn组物品,每组有aia_iai个肉和bib_ibi个菜,你可以选择两组物品让后将肉和菜其串在一根串上,问有多少种不同的串法. 两种方法不同当且仅当选 ...
- codeforces1497 D. Geniue(dp+图论)
D. Geniue Frozen_Guardian题解 Implicit_总结 首先把此序列看作一个完全图,然后按照边权从小到大的顺序枚举边. 如何按照边权从小到大枚举边? 下面考虑形如边(a,b)( ...
- zoj1134 Strategic Game(DP/图论)
/* 简单的树形DP:利用搜索正向求解. 0的孩子必须是1,1的孩子任意,取最小的. */ View Code 1 #include <stdio.h> 2 #include ...
- QBXT 2018春季DP图论班 2018.4.29 --- 图论基础
*钟皓曦(长者.钟百万)老师授课* 图:由边集E和点集V构成. 有向图:含有至少一条有向边的图. 无向图:只含有无向边的图. →例:左图是有向图,因为其含有有向边. 右图是有向图.虽然无向边相当于两条 ...
- [NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)
达哥送分给我我都不要,感觉自己挺牛批. $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=\sum C_n^i \times C_i^{\frac{i}{2}} \t ...
- BZOJ2017[USACO 2009 Nov Silver 1.A Coin Game]——DP+博弈论
题目描述 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为"Xoinc"的两人硬币游戏. 初始时,一个有N(5 <= N <= 2,000)枚硬币的堆栈放在地上,从堆 ...
- 清北学堂dp图论营游记day4
依然zhx讲. 讲了概率与期望: 期望:事件结果的平均大小.记作E(x). E(x)=每种结果的大小与其概率的乘积的和. 例如,记掷一枚骰子的点数为x E(x)=1*(1/6)+2*(1/6)+3*( ...
最新文章
- 发起一个ajax请求,发送ajax请求
- java xpath 命名空间_【转】玩转 XPath 和缺省命名空间(Default Namespaces)
- Android应用中的动画详细使用教程
- 可怕的DefaultAbstractHelperImpl
- 【Servlet】过滤器技术
- jQuery和vue 设置ajax全局请求
- 如何用python计算营业额_如何用Python进行RFM分析
- Java RMI 服务易受 SSRF 攻击
- db2 c语言,DB2数据库安全(二)——身份认证
- swift继承与重载
- 2018百度之星程序设计大赛初赛B——1004p1m2
- LNK1169 LNK2005错误
- 985硕毕业,面试13家企业,拿7个大厂offer,回顾面试总结
- fs.readFileSync 引入路径错误
- Linux系统的特点有哪些
- NAACL 2022事件相关(事件抽取、事件关系抽取、事件预测等)论文汇总
- Android中的ShareSDK学习
- IEEE 802.11 无线局域网络 (Wireless LAN)
- php sequelize,关于javascript:eggjs-sequelize-的常用方法总结
- 人生就是一个完整的项目