light oj 1011Marriage Ceremonies
2015-09-17 22:37
316 查看
总结状压dp板子。
强迫症预处理,多写了几行但非常快
强迫症预处理,多写了几行但非常快
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int INF=0x3f3f3f3f; const int maxn=16; int dp[1<<maxn],bp[1<<maxn]; int mp[maxn+4][maxn+4]; struct fuck{ int a[1<<maxn]; int idx; }f[18]; int getnum(int x) { int ans=0; while(x>0) { if(x&1) ans++; x>>=1; } return ans; } void init() { int m=1<<maxn; int i,j; for(i=1;i<=16;i++) f[i].idx=0; for(i=1;i<m;i++) { j=getnum(i); f[j].a[f[j].idx++]=i; } } int main() { int i,j,n,m,t; scanf("%d",&t); init(); int cas=1; while(t--) { scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&mp[i][j]); memset(dp,0,sizeof(dp)); int len=(1<<n); int k; for(i=1;i<=n;i++) { for(j=0;j<f[i].idx;j++) { if(f[i].a[j]>=len) break; for(k=0;k<n;k++) { int sb=(1<<k); if(f[i].a[j]&sb) dp[f[i].a[j]]=max(dp[f[i].a[j]],dp[f[i].a[j]|sb]+mp[i][k+1]); } } } printf("Case %d: %d\n",cas++,dp[(1<<n)-1]); } return 0; }
相关文章推荐
- mac OS X下终端使用tree命令列目录
- 百度地图接口调用
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- 攻下隔壁女生路由器后,我都做了些什么
- 全注解SSH
- Implement Queue using Stacks
- 百度笔试题--钓鱼比赛
- Dijkstra理解
- iOS中的UIToolBar
- 《未来的程序员》
- U3D UGUI学习2 - RectTransform
- Java记录 -34- Arrays类解析
- 腾讯校招技术岗面试经历及总结(已发offer)
- 【数据结构之旅】顺序栈入门操作
- 学习日志---Apriori算法发现频繁集
- Android第八讲——多媒体(四)播放视频(mp4/3gp) MediaPlayer
- hdu 5011 nim博弈变形
- TCP/IP发送图片,swing.JPanel显示并更新图片(二、图片发送和发送/接受的同步)
- 2015.9.3反法西斯胜利70周年大阅兵评论
- iOS开发之属性、单例、代理、通知传值比较