程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> COdeforces#417D Cunning Gena(狀壓DP)

COdeforces#417D Cunning Gena(狀壓DP)

編輯:關於C++

A boy named Gena really wants to get to the "Russian Code Cup" finals, or at least get a t-shirt. But the offered problems are too complex, so he made an arrangement with his n friends that they will solve the problems for him.

The participants are offered m problems on the contest. For each friend, Gena knows what problems he can solve. But Gena's friends won't agree to help Gena for nothing: the i-th friend asks Gena xi rubles for his help in solving all the problems he can. Also, the friend agreed to write a code for Gena only if Gena's computer is connected to at least ki monitors, each monitor costs b rubles.

Gena is careful with money, so he wants to spend as little money as possible to solve all the problems. Help Gena, tell him how to spend the smallest possible amount of money. Initially, there's no monitors connected to Gena's computer.

Input

The first line contains three integers n, m and b (1?≤?n?≤?100; 1?≤?m?≤?20; 1?≤?b?≤?109) — the number of Gena's friends, the number of problems and the cost of a single monitor.

The following 2n lines describe the friends. Lines number 2i and (2i?+?1) contain the information about the i-th friend. The 2i-th line contains three integers xi, ki and mi (1?≤?xi?≤?109; 1?≤?ki?≤?109; 1?≤?mi?≤?m) — the desired amount of money, monitors and the number of problems the friend can solve. The (2i?+?1)-th line contains mi distinct positive integers — the numbers of problems that thei-th friend can solve. The problems are numbered from 1 to m.

Output

Print the minimum amount of money Gena needs to spend to solve all the problems. Or print -1, if this cannot be achieved.

Sample test(s) input
2 2 1
100 1 1
2
100 2 1
1
output
202
input
3 2 5
100 1 1
1
100 1 1
2
200 1 2
1 2
output
205
input
1 2 1
1 1 1
1
output
-1
我們發現由於所需要的監視器數量不同,所以我們要將監視器數量從小到大 排序,然後狀壓DP,因為後面所需監視器超過前面,所以我們不必再考慮監 視器夠不夠。接下來就是狀壓DP了。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#includewww.2cto.com
using namespace std;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )
typedef long long LL;
typedef pairpil;
const LL INF=1e19;
LL dp[1<<20];
struct node{
    int cost,k;
    int s;
}e[110];
int n,m,b,num;
int cmp(node l1,node l2)
{
    return l1.k


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved