hdu 5890 Eighty seven DP
来源:互联网 发布:c# vsa javascript 编辑:程序博客网 时间:2024/06/16 18:24
http://acm.hdu.edu.cn/showproblem.php?pid=5890
题意:
给n个数,选10个,看能否使得sum==87
然后q次询问,每次询问会从n个数里删掉 1-3个数,然后问 能否可以【选10个,看能否使得sum==87】..
L【i】【j】【k】【sum】 ,前j个数,不选第i个,选了k个数,和为sum
R【】【】【】【】【】 同样定义,
处理好这两个dp后,
每次询问,暴力for k 和 sum 这2维。
#include<bits/stdc++.h>using namespace std;const int maxn = 55;bool L[maxn][maxn][11][90],R[maxn][maxn][11][90];int a[maxn];int n;int main(){ //freopen("input.txt","r",stdin); int tt; scanf("%d",&tt); while(tt--) { scanf("%d",&n); for (int i=1; i<=n; i++) scanf("%d",&a[i]); memset(L,0,sizeof(L)); memset(R,0,sizeof(R)); L[0][0][0][0]=1; for (int j=1; j<=n; j++) { for (int i=0; i<=j; i++) { for (int k=0; k<=10; k++) { for (int sum=0; sum<=87; sum++) { if (i==0) { if (k<=j) { L[i][j][k][sum]=L[i][j][k][sum] | L[i][j-1][k][sum]; if (k>=1 && sum-a[j]>=0) L[i][j][k][sum]=L[i][j][k][sum] | L[i][j-1][k-1][sum-a[j]]; } } else if (i<j) { if (k<j) { L[i][j][k][sum]=L[i][j][k][sum] | L[i][j-1][k][sum]; if (k>=1 && sum-a[j]>=0) L[i][j][k][sum]=L[i][j][k][sum] | L[i][j-1][k-1][sum-a[j]]; } } else { if (k<j) L[i][j][k][sum]=L[i][j][k][sum] | L[0][j-1][k][sum]; } } } } } R[n+1][n+1][0][0]=1; for (int j=n; j>=1; j--) { for (int i=j; i<=n+1; i++) { for (int k=0; k<=10; k++) { for (int sum=0; sum<=87; sum++) { if (i==n+1) { if (k<=n-j+1) { R[i][j][k][sum]=R[i][j][k][sum] | R[i][j+1][k][sum]; if (k>=1 && sum-a[j]>=0) R[i][j][k][sum]=R[i][j][k][sum] | R[i][j+1][k-1][sum-a[j]]; } } else if (i>j) { if (k<n-j+1) { R[i][j][k][sum]=R[i][j][k][sum] | R[i][j+1][k][sum]; if (k>=1 && sum-a[j]>=0) R[i][j][k][sum]=R[i][j][k][sum] | R[i][j+1][k-1][sum-a[j]]; } } else { if (k<n-j+1) R[i][j][k][sum]=R[i][j][k][sum] | R[n+1][j+1][k][sum]; } } } } } int qq; scanf("%d",&qq); while (qq--) { int q[3]; scanf("%d%d%d",&q[0],&q[1],&q[2]); sort(q,q+3); int cun=unique(q,q+3)-q; bool ok=0; if (cun==1) { if (L[q[0]][n][10][87]) ok=1; else ok=0; } else if (cun==2) { for (int k=0; k<=10; k++) for (int sum=0; sum<=87; sum++) { if (L[q[0]][q[1]-1][k][sum] && R[n+1][q[1]+1][10-k][87-sum]) ok=1; } } else { for (int k=0; k<=10; k++) for (int sum=0; sum<=87; sum++) { if (L[q[0]][q[1]-1][k][sum] && R[q[2]][q[1]+1][10-k][87-sum]) ok=1; } } if (ok) printf("Yes\n"); else printf("No\n"); } } return 0;}
0 0
- hdu 5890 Eighty seven DP
- HDU 5890 Eighty seven(bitset优化dp)
- hdu 5890 Eighty seven
- Hdu 5890 Eighty seven
- Hdu 5890 Eighty seven
- 【HDU 5890】Eighty seven(bitset+DP+优化)
- hdu 5890 Eighty seven 背包bitset
- hdu 5890 Eighty seven(背包+bitset)
- HDU 5890 Eighty seven (DP + bitset) 优化 (2016 青岛网络赛)
- HDU 5890 Eighty seven ACM/ICPC 2015 Shenyang Online(DP+bitset优化)
- hdu5890 Eighty seven(DP)
- HDU5890 Eighty seven (数位DP)
- Eighty seven
- 2016 ACM/ICPC Asia Regional Qingdao hdu5890 Eighty seven(DP+bitset优化妙用)
- hdu5890 Eighty seven(背包+bitset优化)
- 【hdu5890】【bitset+dp】Eighty seven【每次从序列中删掉第i,j,k个数后,是否存在一种选10个数和为87的方案】
- 1783 转化为one thousand and seven hundred and eighty -three
- Eighty seven (bitset优化) 在n个数中取m个数和为k
- hanoi汉诺塔C++实现
- Windows核心编程 第七章 线程的调度、优先级和亲缘性(上)
- Web.py 的搭建(Nginx+web.py+MySQL)
- 二分-Codeforces 371C Hamburgers
- CodeForces 588B Duff in Love
- hdu 5890 Eighty seven DP
- 排序算法(三)——插入排序
- UML结构建模图———组件图
- linux并行集群的搭建
- 排序:交换排序——冒泡排序法
- Volley网络请求框架
- 动画【Android】
- 1034. Head of a Gang (30)
- 2016ICPC青岛赛区网络赛 1001