Untitled
unknown
plain_text
2 years ago
1.1 kB
3
Indexable
#include<iostream> using namespace std; int n,m,p,l; int a[100],b[100],c[100][100],d[100]; int ans; int vs[100]; int x[100]; void backtrack(int num, int sum) { if (num == m+1) { for (int i = 1; i<=n; i++) vs[i] = 0; for (int i=1; i<=m; i++) if (x[i] == 1) { for (int j=1; j<=c[i][0]; j++) vs[c[i][j]] = 1; } for (int i=1; i<=l; i++) if (vs[d[i]] == 0) sum+=a[d[i]]; if (ans > sum) ans = sum; return; } x[num] = 0; backtrack(num+1,sum); x[num] = 1; if (sum >= ans) return; else backtrack(num+1, sum+b[num]); } int main() { // freopen("input.txt","r",stdin); int t; cin >> t; for (int tc=1; tc<=t; tc++) { ans = 0; cin >> n; for (int i=1; i<=n; i++) cin >> a[i]; cin >> m; for (int i=1; i<=m; i++) { cin >> b[i]; cin >> c[i][0]; for (int j=1; j<=c[i][0]; j++) cin >> c[i][j]; } cin >> l; for (int i=1; i<=l; i++) { cin >> d[i]; ans+= a[d[i]]; } backtrack(1,0); cout << "#" << tc << " " << ans << endl; } }
Editor is loading...