您的位置:首页 > 其它

RCC 2014 Warmup (Div. 1)

2014-04-23 15:42 531 查看
A

暴力

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
#include<queue>
#include<set>
using namespace std;
#define N 1010
#define LL long long
//#define INF 1e18+1e12
const double eps = 1e-8;
const double pi = acos(-1.0);
const double inf = ~0u>>2;
const LL INF = (1ll<<62);
LL dp[1<<20];
struct node
{
int x,k,m;
int a[105];
int s;
}p[105];
bool cmp(node a,node b)
{
return a.k<b.k;
}
int main()
{
int i,j,n,m;
LL b;
cin>>n>>m>>b;
for(i = 0 ; i < (1<<m) ; i++)
dp[i] = INF;
for(i = 1; i <= n ;i++)
{
p[i].s = 0 ;
scanf("%d%d%d",&p[i].x,&p[i].k,&p[i].m);
for(j = 0; j < p[i].m ; j++)
{
scanf("%d",&p[i].a[j]);
p[i].s|=(1<<(p[i].a[j]-1));
}
}
sort(p+1,p+n+1,cmp);
dp[0] = 0;
LL ans= INF;
for(i = 1; i <= n ;i++)
{
for(j = 0 ;j < (1<<m) ; j++)
{
if(dp[j]==INF) continue;
dp[j|p[i].s] = min(dp[j|p[i].s],dp[j]+p[i].x);
}
ans = min(ans,dp[(1<<m)-1]+p[i].k*b);
}
if(ans==INF)
puts("-1");
else
cout<<ans<<endl;
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: