codeforces 283C

 2023-09-05 阅读 387 评论 0

摘要:给 n 中 钱币。以及每两种钱币的关系,表示,ai 的 个数 要大于 bi 组合成一个价值val,求方案数,好奇妙的一个处理方式,不得不说又学到了 #include<stdio.h> #include<vector> #include<cstring> #include<iostream&g

给 n 中 钱币。以及每两种钱币的关系,表示,ai 的 个数 要大于 bi 组合成一个价值val,求方案数,好奇妙的一个处理方式,不得不说又学到了

#include<stdio.h>
#include<vector>
#include<cstring>
#include<iostream>
using namespace std;
const int mod = 1e9 + 7;
const int M = 1e5 + 1;
long long dp[M];
int a[500],in[500],father[500];int main(){int n,m,t,u,v;while(cin >> n >> m  >> t){memset(in,0,sizeof(in));memset(father,0,sizeof(father));memset(dp,0,sizeof(dp));    int x = m;// memset(che,0,sizeof(che));for(int i=1;i<=n;i++) cin >> a[i];while(m --){cin >> u >> v;in[v] ++ ;father[u] = v;}for(int i=0;i<x;i++){int pos = 0;for(int j=1;j<=n;j++){if(father[j] && !in[j]){pos = j;break;}}// cout << pos <<endl;if(!pos){puts("0");return 0;}int pre = father[pos];father[pos] = 0;in[pre] --;t -= a[pos];a[pre] += a[pos];if(t < 0){puts("0");return 0;}}dp[0] =1;for(int i=1;i<=n;i++){for(int j=a[i];j<=t;j++){dp[j] = (dp[j] + dp[j-a[i]]) % mod;}}//cout << t <<endl;cout << dp[t] <<endl;}
}


版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/714.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息