【题解】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;
}
【题解】284E. Coin Troubles(dp+图论建模)的更多相关文章
- DP&图论 DAY 6 下午 考试
DP&图论 DAY 6 下午 考试 样例输入 样例输出 题解 >50 pt dij 跑暴力 (Floyd太慢了QWQ O(n^3)) 枚举每个点作为起点,dijks ...
- UVA.674 Coin Change (DP 完全背包)
UVA.674 Coin Change (DP) 题意分析 有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 每种硬币的数量是无限的.典型完全背包. 状态 ...
- 【题解】POJ1934 Trip (DP+记录方案)
[题解]POJ1934 Trip (DP+记录方案) 题意: 传送门 刚开始我是这么设状态的(谁叫我DP没学好) \(dp(i,j)\)表示钦定选择\(i\)和\(j\)的LCS,然而你会发现这样钦定 ...
- DP&图论 DAY 7 上午
DP&图论 DAY 7 上午 图论练习题 P2176 [USACO14FEB]路障Roadblock 先跑最短路(最多n条边,否则出环) 枚举每条边,加倍,再跑 dijkstra 取最大 ...
- DP&图论 DAY 6 上午
DP&图论 DAY 6 上午 双连通分量 从u-->v不存在必经边,点 点双连通分量 边双连通分量 点/边双连通分量缩点之后变成一个树 找连通块的时候不越过割点或者桥 P3469 [ ...
- DP&图论 DAY 5 下午
DP&图论 DAY 5 下午 树链剖分 每一条边要么属于重链要么轻边 证明: https://www.cnblogs.com/sagitta/p/5660749.html 轻边重链都是交 ...
- DP&图论 DAY 5 上午
DP&图论 DAY 5 上午 POJ 1125 Stockbroker Grapevine 有 N 个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径.现在有一个消息要由某个人开 ...
- DP&图论 DAY 4 下午图论
DP&图论 DAY 4 下午 后天考试不考二分图,双联通 考拓扑排序 图论 图的基本模型 边: 有向边构成有向图 无向边构成无向图 权值: 1.无权 2.点权 3.边权 4.负权(dij不 ...
- DP&图论 DAY 4 上午
DP&图论 DAY 4 上午 概率与期望 概率◦某个事件A发生的可能性的大小,称之为事件A的概率,记作P(A).◦假设某事的所有可能结果有n种,每种结果都是等概率,事件A涵盖其中的m种,那 ...
随机推荐
- Android 整合实现简单易用、功能强大的RecyclerView
之前总是会有人在一些开发群里问,有木有比较好使且功能强大些的RecyclerVew,比如支持下来刷新,加载更多等,还有人在问,如何为RecyclerView添加分割线,尤其是如何为网格布局添加分割线? ...
- Python深入:setuptools简介
Setuptools是Python Distutils的加强版,使开发者构建和发布Python包更加容易,特别是当包依赖于其他包时.用setuptools构建和发布的包与用Distutils发布的包是 ...
- 正则 ?<= 和 ?= 用法 以及零宽断言等概念
正则 ?<= 和 ?= 用法 参考网址:http://baike.baidu.com/link?url=2zORJF9GOjU8AkmuHDLz9cyl9yiL68PdW3frayzLwW ...
- ElementUI分页Pagination自动到第一页
当数据量过多时,使用分页请求数据. 设置分页的页数自动回到第一页. 例: <div class="pagination"> <el-pagination back ...
- 最优化方法系列:Adam+SGD-AMSGrad 重点
https://blog.csdn.net/wishchin/article/details/80567558 自动调参的Adam方法已经非常给力了,不过这主要流行于工程界,在大多数科学实验室中,模型 ...
- Node.js 安装第三方模块包(npm),通过 package.json配置信息安装项目依赖的模块
npm下载安装的第三方模块包官网(提供包名和使用方法):https://www.npmjs.com/ 淘宝镜像(国内,比较快):https://npm.taobao.org/ commonjs01.j ...
- spring boot activiti 整合
1.pom.xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti- ...
- SpringBoot+Thyemleaf开发环境正常,打包jar发到服务器就报错Template might not exist or might not be accessible
网上查看了各种解决的思路,总结如下: 1. 在controller层请求处理完了返回时,没有使用@RestController或@ResponseBody而返回了非json格式 这种情况下返回的数据t ...
- C# “不支持给定路径的格式”异常处理
问题背景 无聊研究了一下怎么发送邮件(包含附件),但发现附带的文件路径除了报错就是报错,不知道为什么. 用了不下好几种方式,比如 var x = "E:\\Git\\cmd\\git.exe ...
- H3C 静态黑洞路由应用