题目链接:http://codeforces.com/contest/284/problem/E

题意:n种类型的硬币,硬币的面值可能相同,现在要在满足一些限制条件下求出,用这些硬币构成t面值的方案数;每个限制条件:a,b表示a种类型的硬币要大于b种类型的硬币;

题解:显然如果哪些条件构成环的话就不存在直接输出0。那么可行的情况下要先预处理一下,假设a>b>c>d

那么最少的选择方式是(3,2,1,0)这个必须先预处理一下,然后还有,假如增加a的数量,那么b,c,d的数

量就不受影响,但是如果增加b的数量,那么a的数量肯定要增加,所以还要预处理一个num[i]表示改变i种硬币

需要增加多少。然后就是完全背包了。

#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#define mod 1000000007
using namespace std;
typedef long long ll;
const int M = 1e5 + 10;
ll a[400] , num[400] , dp[M];
int to[400] , pre[400];
vector<int>vc[400];
void dfs(int pos , int cnt) {
vc[cnt].push_back(pos);
if(to[pos] == -1)
return ;
dfs(to[pos] , cnt);
}
int main() {
int n , q , t , u , v;
scanf("%d%d%d" , &n , &q , &t);
for(int i = 1 ; i <= n ; i++) {
scanf("%I64d" , &a[i]);
to[i] = -1;
pre[i] = -1;
}
while(q--) {
scanf("%d%d" , &u , &v);
to[u] = v;
pre[v] = u;
}
int count = 0;
for(int i = 1 ; i <= n ; i++) {
if(pre[i] == -1) {
dfs(i , count);
count++;
}
}
ll sta = 0;
int tot = 0;
for(int i = 0 ; i < count ; i++) {
int len = vc[i].size();
tot += len;
long long sum = 0;
for(int j = 0 ; j < len ; j++) {
int pos = vc[i][j];
sum += a[pos];
num[pos] = sum;
}
sum = 0;
if(len > 1) {
for(int j = 0 ; j < len - 1 ; j++) {
int pos = vc[i][j];
sum += a[pos];
sta += sum;
}
}
}
memset(dp , 0 , sizeof(dp));
if(sta <= t && tot == n) {
dp[sta] = 1;
for(int i = 0 ; i < count ; i++) {
int len = vc[i].size();
for(int j = 0 ; j < len ; j++) {
int pos = vc[i][j];
for(int k = (int)max(sta , num[pos]) ; k <= t ; k++) {
dp[k] += dp[k - num[pos]];
dp[k] %= mod;
}
}
}
}
printf("%I64d\n" , dp[t] % mod);
return 0;
}

codeforces 284 E. Coin Troubles(背包+思维)的更多相关文章

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

    [题解]284E. Coin Troubles(dp+图论建模) 题意就是要你跑一个完全背包,但是要求背包的方案中有个数相对大小的限制 考虑一个\(c_i<c_j\)的限制,就是一个\(c_i\ ...

  2. C. Coin Troubles 有依赖的背包 + 完全背包变形

    http://codeforces.com/problemset/problem/283/C 一开始的时候,看着样例不懂,为什么5 * a1 + a3不行呢?也是17啊 原来是,题目要求硬币数目a3 ...

  3. codeforces 864 E. Fire(背包+思维)

    题目链接:http://codeforces.com/contest/864/problem/E 题解:这题一看就很像背包但是这有3维限制也就是说背包取得先后也会对结果有影响.所以可以考虑sort来降 ...

  4. codeforces 688 E. The Values You Can Make(01背包+思维)

    题目链接:http://codeforces.com/contest/688/problem/E 题解:设dp[s1][s2]表示s1状态下出现s2是否合理.那么s1显然可以更具01背包来得到状态.首 ...

  5. CodeForces - 946D Timetable (分组背包+思维)

    题意 n天的课程,每天有m个时间单位.若时间i和j都有课,那么要在学校待\(j-i+1\)个时间.现在最多能翘k节课,问最少能在学校待多少时间. 分析 将一天的内容视作一个背包的组,可以预处理出该天内 ...

  6. FZU Problem 2214 Knapsack problem(背包+思维转换)

    转化思维,把价值当成背包容量,选择最小的花费,从上到下枚举,找到当这个最小的花费. #include<iostream> #include<cstring> #include& ...

  7. Codeforces 730J:Bottles(背包dp)

    http://codeforces.com/problemset/problem/730/J 题意:有n个瓶子,每个瓶子有一个当前里面的水量,还有一个瓶子容量,问要把所有的当前水量放到尽量少的瓶子里至 ...

  8. Codeforces 305B:Continued Fractions(思维+gcd)

    http://codeforces.com/problemset/problem/305/B 题意:就是判断 p / q 等不等于那条式子算出来的值. 思路:一开始看到 1e18 的数据想了好久还是不 ...

  9. codeforces 876 F. High Cry(思维)

    题目链接:http://codeforces.com/contest/876/problem/F 题解:一道简单的思维题,知道最多一共有n*(n+1)/2种组合,不用直接找答案直接用总的组合数减去不符 ...

随机推荐

  1. spring boot 学习笔记之前言----环境搭建(如何用Eclipse配置Maven和Spring Boot)

    本篇文档来源:https://blog.csdn.net/a565649077/article/details/81042742 1.1 Eclipse准备 (1)     服务器上安装JDK和Mav ...

  2. 非UI线程更新界面

    package com.caterSys.Thread; import java.text.SimpleDateFormat; import java.util.Date; import org.ec ...

  3. Python 之父再发文:构建一个 PEG 解析器

    花下猫语: Python 之父在 Medium 上开了博客,现在写了两篇文章,本文是第二篇的译文.前一篇的译文 在此 ,宣布了将要用 PEG 解析器来替换当前的 pgen 解析器. 本文主要介绍了构建 ...

  4. spark shuffle的写操作之准备工作

    前言 在前三篇文章中,spark 源码分析之十九 -- DAG的生成和Stage的划分 剖析了DAG的构建和Stage的划分,spark 源码分析之二十 -- Stage的提交 剖析了TaskSet任 ...

  5. java根据经纬度查询门店地理位置-完美解决附近门店问题

    1.首先我们需要创建一个门店表如下: CREATE TABLE `app_store` ( `store_id` ) NOT NULL AUTO_INCREMENT COMMENT '发布id', ` ...

  6. Spark 系列(十一)—— Spark SQL 聚合函数 Aggregations

    一.简单聚合 1.1 数据准备 // 需要导入 spark sql 内置的函数包 import org.apache.spark.sql.functions._ val spark = SparkSe ...

  7. SAP 修改MIRO变式

    转自:http://blog.vsharing.com/SAP100/A799545.html

  8. Kubernetes-保障集群内节点和网络安全

    13.1.在pod中使用宿主节点的Linux命名空间 13.1.1.在pod中使用宿主节点的网络命名空间 在pod的yaml文件中就设置spec.hostNetwork: true 这个时候pod使用 ...

  9. ASP.NET Core[源码分析篇] - WebHost

    _configureServicesDelegates的承接 在[ASP.NET Core[源码分析篇] - Startup]这篇文章中,我们得知了目前为止(UseStartup),所有的动作都是在_ ...

  10. Django Mysql数据库-基于双下划线的跨表查询

    一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(mode ...