3717: [PA2014]Pakowanie
来源:互联网 发布:淘宝扬琴 编辑:程序博客网 时间:2024/06/07 19:51
dp
没想出来TAT
#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<(n);i++)#define rep2(i,k,n) for(int i=k;i>=(n);i--)using namespace std;const int N=16777777;int f[N],g[N];int c[105],a[N],n,m;bool cmp(int a,int b){ return a>b;}int main(){//freopen("in.in","r",stdin); scanf("%d%d",&n,&m); rep(i,0,n)scanf("%d",&a[i]); rep2(i,n-1,0)a[(1<<i)]=a[i]; rep(i,1,m+1)scanf("%d",&c[i]); sort(c+1,c+m+1,cmp); int S=(1<<n); rep(s,1,S){ f[s]=m+1,g[s]=-1; for(int i=s;i;i-=(i&(-i))){ int k=(i&(-i)),ns=s-k; if((f[ns]<f[s] || (f[ns]==f[s] && g[ns]-a[k]>g[s])) && g[ns]>=a[k]) f[s]=f[ns],g[s]=g[ns]-a[k]; if((f[ns]+1<f[s] || (f[ns]+1==f[s] && c[f[ns]+1]-a[k]>g[s])) && c[f[ns]+1]>=a[k]) f[s]=f[ns]+1,g[s]=c[f[ns]+1]-a[k]; } }if(f[S-1]>m)printf("NIE\n"); else printf("%d\n",f[S-1]);}
0 0
- 3717: [PA2014]Pakowanie
- 【PA2014】【BZOJ3717】Pakowanie
- BZOJ3717 [PA2014]Pakowanie
- BZOJ3717: [PA2014]Pakowanie
- [BZOJ3717]-[PA2014]Pakowanie-状压DP
- bzoj3717 [PA2014]Pakowanie(状压DP)
- 【PA2014】Fiolki
- bzoj3709 [PA2014]Bohater
- bzoj3713 [PA2014]Iloczyn
- bzoj3715 [PA2014]Lustra
- 3709: [PA2014]Bohater
- 【BZOJ 3714】 [PA2014]Kuglarz
- [PA2014]Fiolki 解题报告
- 【PA2014】【BZOJ3709】Bohater
- bzoj3714【PA2014】Kuglarz
- 【PA2014】【BZOJ3718】Parking
- 【PA2014】【BZOJ3714】Kuglarz
- 【PA2014】【BZOJ3728】Final Zarowki
- 协方差矩阵 阵列处理基础
- 。。。。
- [开源] Android 代码高亮显示控件
- tableview和cell高度自适应
- 基于jquery.qrcode.min.js的二维码实现
- 3717: [PA2014]Pakowanie
- 对C++多文件程序的总结及例程
- 面试题test
- andrid studio 使用攻略
- 集合和流的综合运用
- Android Layout
- [译]Go Slices: usage and internals
- HTTPS_SSLTT介绍及其配置
- BZOJ 3241 UOJ 125 NOI 2013 书法家