Codeforces580D. Kefa and Dishes
2015-09-25 11:38
337 查看
http://codeforces.com/problemset/problem/580/D
状态压缩DP。
my code
状态压缩DP。
#include<bits/stdc++.h> const int maxn=18; using namespace std; typedef long long int64; typedef pair<int,int> PII; int64 f[maxn+1][1<<maxn]; vector<PII> l[maxn+1]; int n,m,k,w[maxn]; void init(){ scanf("%d%d%d",&n,&m,&k); for (int i=0;i<n;++i) scanf("%d",&w[i]); for (int x,y,v,i=1;i<=k;++i){ scanf("%d%d%d",&x,&y,&v);--x;--y; l[x].push_back(make_pair(y,v)); } } void work(){ memset(f,-1,sizeof(f)); f [0]=0;int64 ans=0; for (int i=0;i<1<<n;++i){ for (int j=0;j<=n;++j){ if (f[j][i]==-1) continue; for (int k=0;k<n;++k){ if ((i>>k)&1) continue; int reward=0; for (int x=0;x<l[j].size();++x) if (l[j][x].first==k) reward=l[j][x].second; f[k][i|(1<<k)]=max(f[j][i]+w[k]+reward,f[k][i|(1<<k)]); } } int bit=0; for (int j=0;j<n;++j) if ((i>>j)&1) ++bit; if (bit==m) for (int j=0;j<=n;++j) ans=max(ans,f[j][i]); } printf("%I64d\n",ans); } int main(){ init(); work(); return 0; }
my code
相关文章推荐
- windows32位下安装Redis+连接PHP
- Android万能适配器
- Android UI学习 - Menu
- Oracle数据库导入、导出问题。
- 同时查找最大值和最小值
- 开发板学习摘要
- *Edit Distance
- android中Handle类的用法实例分析
- ASP.NET预备知识学习笔记
- android 混淆打包
- 数学中竟然还有这样的定理!
- PHP多线程读写文件操作
- 纯属记录下
- MyBatis返回值
- PowerShell 4.0实现自动化设置服务器
- 关于”图书管理系统(Borrowers,ACM/ICPC World Finals 1994, UVa230)"的讨论
- 数值的整数次方
- Redmine下载安装配置
- 计数排序
- iOS汉字转拼音