求助 ABC D&E
  • 板块学术版
  • 楼主Albert_Wei
  • 当前回复12
  • 已保存回复12
  • 发布时间2023/1/21 21:42
  • 上次更新2023/10/24 03:23:45
查看原帖
求助 ABC D&E
676634
Albert_Wei楼主2023/1/21 21:42
#include <map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <string>
#include <cstdio>
#include <vector>
#include <fstream>
#include <cstring>
#include <iomanip>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
using namespace std;

bool dp[55][10005] = {0};
long long n, x, a[55], b[55];
int main() {
	cin >> n >> x;
	for (int i = 1; i <= n; i++)
		cin >> a[i] >> b[i];
	dp[0][0] = true;
	for (int i = 1; i <= n; i++)
		for (int j = 0; j <= b[i]; j++)
			for (int k = 0; k + a[i] * j <= x; k++)
				dp[i][k + a[i] * j] = dp[i - 1][k] || dp[i - 1][k + a[i] * j];
	if (dp[n][x]) cout << "Yes" << endl;
	else cout << "No" << endl;
	return 0;
}

#include <map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <string>
#include <cstdio>
#include <vector>
#include <fstream>
#include <cstring>
#include <iomanip>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
using namespace std;

string s[305];
long long n, a[305], q, u, v;
long long inf = 0x3f3f3f3f3f3f3f3f;
long long d1[305][305], d2[305][305];
inline void bfs(int x) {
	queue<int> q;
	q.push(x);
	d1[x][x] = 0, d2[x][x] = a[x];
	while (!q.empty()) {
		int t = q.front();
		q.pop();
		for (int i = 0; i < s[t].size(); i++)
			if (s[t][i] == 'Y' && (d1[x][s[t][i]] == inf || (d1[x][s[t][i]] > 
				d1[x][t] && (d2[x][s[t][i]] < d2[x][t] + a[s[t][i]] || d2[x][s[t][i]] == inf)))) {
				d1[x][s[t][i]] = d1[x][t] + 1;
				d2[x][s[t][i]] = d2[x][t] + a[s[t][i]];
				q.push(s[t][i]);
			}
	}
} 

int main() {
	memset(d1, inf, sizeof d1);
	memset(d2, inf, sizeof d2);
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 1; i <= n; i++) cin >> s[i];
	for (int i = 1; i <= n; i++) bfs(i);
	cin >> q;
	for (int i = 1; i <= q; i++) {
		cin >> u >> v;
		cout << d1[u][v] << " " << d2[u][v] << endl;
	}
	return 0;
}

2023/1/21 21:42
加载中...