loj 1037(状压dp)
来源:互联网 发布:java编写小程序 编辑:程序博客网 时间:2024/06/12 13:53
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25914
思路:dp[state]表示当前状态下要消耗的最小的shots。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define inf 1<<30 7 8 int n,val[17],dp[1<<17]; 9 char map[17][17];10 11 int main()12 {13 int _case,t=1;14 scanf("%d",&_case);15 while(_case--){16 scanf("%d",&n);17 for(int i=0;i<n;i++)scanf("%d",&val[i]);18 for(int i=0;i<n;i++)scanf("%s",map[i]);19 fill(dp,dp+(1<<n),inf);20 for(int i=0;i<n;i++)dp[1<<i]=val[i];21 for(int state=0;state<(1<<n);state++){22 if(dp[state]==inf)continue;23 for(int i=0;i<n;i++)if(state&(1<<i)){24 for(int j=0;j<n;j++)if(!(state&(1<<j))){25 int cnt=map[i][j]-'0';26 if(cnt==0)dp[state|(1<<j)]=min(dp[state|(1<<j)],dp[state]+val[j]);27 else {28 cnt=val[j]/cnt+(val[j]%cnt!=0);29 dp[state|(1<<j)]=min(dp[state|(1<<j)],dp[state]+cnt);30 }31 }32 }33 }34 printf("Case %d: %d\n",t++,dp[(1<<n)-1]);35 }36 return 0;37 }
0 0
- loj 1037(状压dp)
- loj 1018(状压dp+记忆化搜索)
- loj 1316(spfa预处理+状压dp)
- loj 1004(dp)
- loj 1017(dp)
- loj 1032(数位dp)
- loj 1036(dp)
- loj 1030概率dp
- loj 1032 数位dp
- loj 1357(树形dp)
- LOJ 1017 普通dp
- loj 1021(状压dp+记忆化搜索)
- LOJ 1422(区间DP)
- [LOJ#2290][THUWC 2017][概率][状压][DP][陈老师神题]随机二分图
- 【状压DP】LOJ#6177. 「美团 CodeM 初赛 Round B」送外卖2
- loj 1038(dp求期望)
- loj 1044(dp+记忆化搜索)
- LOJ 1422 Halloween Costumes【区间DP】
- loj 1150(spfa预处理+二分+最大匹配)
- loj 1031(区间dp+记忆化搜索)
- loj 1032(数位dp)
- loj 1167(二分+最大流)
- loj 1036(dp)
- loj 1037(状压dp)
- loj 1038(dp求期望)
- hdu 4281(MTSP)
- loj 1201(最大独立集)
- loj 1044(dp+记忆化搜索)
- loj 1099(最短路)
- loj 1316(spfa预处理+状压dp)
- loj 1002(spfa变形)
- hdu 4114(状压dp)