FZU 2165 v11(最小重复覆盖)+ codeforces 417D Cunning Gena
2014-05-01 00:49
316 查看
告诉你若干个(<=100)武器的花费以及武器能消灭的怪物编号,问消灭所有怪物(<=100)的最小花费。。。当然每个武器可以无限次使用,不然这题就太水了╮(╯▽╰)╭
这题当时比赛的时候连题都还没看就结束了。。。。赛后一看,果断是重复覆盖。。。
不过之后一直没敲。。。然后今天算是补回来吧,同时也把好久以前学的DLX复习一下。。。
DLX的话,双向十字链表。。。具体的话,百度Google什么的dancing links。。。
一开始敲的时候还是挺顺利的,因为之前做过几次重复覆盖都是直接拿精确覆盖的模板来改。。。差不多的,不过重复覆盖就删列,代码好像还少几行呢。。。不过有时调一会有时wa上一两发。。。又鉴于最近好像好多重复覆盖的题。。。就好像spfa一样频繁出现=。=个人感觉不科学。。。
而且之前那个精确覆盖的模板实在是无法直视,太挫了写得╮(╯▽╰)╭
重点来了~~~代码写好了,可是不AC╮(╯▽╰)╭太可恶了。。。。让JM帮忙看代码。。。于是苦逼地一直找bug。。。。
经过一小时吧大概的奋斗。。。JM发现。。。一个非常好笑的呵呵的亮点。。。。memset(vis,false,sizeof(false));。。。笑死我了。。。还好这是平时随便敲。。。
然后就AC了~~~
复杂度。。不知道怎么算DLX的复杂度哎~~~求高手教,或者说一般N,M多少可以~~
总结就是,打代码要仔细。。。。总之不要犯这种逗比错误。。。。真正比赛的时候就笑不出来了~~~啦啦啦~~~谢谢JM~~~
View Code
这题当时比赛的时候连题都还没看就结束了。。。。赛后一看,果断是重复覆盖。。。
不过之后一直没敲。。。然后今天算是补回来吧,同时也把好久以前学的DLX复习一下。。。
DLX的话,双向十字链表。。。具体的话,百度Google什么的dancing links。。。
一开始敲的时候还是挺顺利的,因为之前做过几次重复覆盖都是直接拿精确覆盖的模板来改。。。差不多的,不过重复覆盖就删列,代码好像还少几行呢。。。不过有时调一会有时wa上一两发。。。又鉴于最近好像好多重复覆盖的题。。。就好像spfa一样频繁出现=。=个人感觉不科学。。。
而且之前那个精确覆盖的模板实在是无法直视,太挫了写得╮(╯▽╰)╭
重点来了~~~代码写好了,可是不AC╮(╯▽╰)╭太可恶了。。。。让JM帮忙看代码。。。于是苦逼地一直找bug。。。。
经过一小时吧大概的奋斗。。。JM发现。。。一个非常好笑的呵呵的亮点。。。。memset(vis,false,sizeof(false));。。。笑死我了。。。还好这是平时随便敲。。。
然后就AC了~~~
复杂度。。不知道怎么算DLX的复杂度哎~~~求高手教,或者说一般N,M多少可以~~
总结就是,打代码要仔细。。。。总之不要犯这种逗比错误。。。。真正比赛的时候就笑不出来了~~~啦啦啦~~~谢谢JM~~~
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #include <string> #include <vector> using namespace std; #define ll long long //#define inf 0x3f3f3f3f #define inf (1ll<<60) #define maxn 110 #define mod 1000000007 #define eps 1e-8 struct node{ int x,k,st; }p[maxn]; bool cmp(node a,node b){return a.k<b.k;} ll dp[1<<20]; int main(){ int n,m,b,mm,tmp; while(~scanf("%d%d%d",&n,&m,&b)){ for(int i=0;i<n;++i){ scanf("%d%d%d",&p[i].x,&p[i].k,&mm); p[i].st=0; while(mm--){ scanf("%d",&tmp); p[i].st+=(1<<(tmp-1)); } } ll ans=inf; sort(p,p+n,cmp); for(int j=(1<<m)-1;j;--j)dp[j]=inf; dp[0]=0; for(int i=0;i<n;++i){ for(int j=(1<<m)-1;j>=0;--j) dp[j|p[i].st] = min(dp[j|p[i].st], dp[j]+p[i].x); ans = min(ans,dp[(1<<m)-1]+(ll)p[i].k*b); } if(ans==inf)puts("-1"); else printf("%I64d\n",ans); } return 0; }
View Code
相关文章推荐
- DLX (重复覆盖+费用不为1的最小费用)fzu Problem 2165 v11
- FZU 1686 舞蹈链之可重复覆盖
- FZU 1686 神龙的难题(DLX 重复覆盖)
- [ACM] FZU 1686 神龙的难题 (DLX 重复覆盖)
- FZU - 1686 神龙的难题 重复覆盖
- FZU 1686 神龙的难题(重复覆盖问题)
- FZU 1686 神龙的难题(DLX可重复覆盖)
- FZU 1686 神龙的难题 (DLX求重复覆盖)
- Treasure Exploration(POJ_2594) -有向图可重复点-最小路径覆盖
- (简单) FZU 1686 神龙的难题 , DLX+可重复覆盖。
- FZU 1686 龙之谜 重复覆盖
- FZU 1686 神龙的难题 重复覆盖
- FZU1686 神龙的难题 —— Dancing Links 可重复覆盖
- 【FZU】1686 神龙的难题 重复覆盖
- FZU 1686 神龙的难题(重复覆盖)
- FZU 1686 神龙的难题(DLX可重复覆盖)
- POJ 2594--Treasure Exploration【二分图 && 最小路径覆盖 && 点可以重复走 && 传递闭包】
- FZU1686 神龙的难题 —— Dancing Links 可重复覆盖
- fzu 1686 重复覆盖
- fzu-神龙的难题 舞蹈链之可重复覆盖