hdu5890
来源:互联网 发布:淘宝网拖鞋带后跟 编辑:程序博客网 时间:2024/04/28 20:09
当成模板:n个数取k个数能不能组成和为x,加入限制条件不能取x,y,z位置上的数
大致题意:有一堆数,一次去掉至少3个数,再从剩余数中取10个如果和能组成87输出Yes
测试案例:
input:
1121 2 3 4 5 6 7 8 9 42 21 22101 2 33 4 52 3 210 10 1010 11 1110 1 11 2 101 11 121 10 1011 11 12
output:
NoNoNoYesNoYesNoNoYesYes
解题思路:我就当模板用
代码:
代码1:
#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>#include <bitset>using namespace std;typedef long long ll;int n;int a[100];bool check[52][52][52];bitset<90> dp[11];void solve(int x,int y,int z){ for (int i=0;i<=10;i++) dp[i].reset(); dp[0][0]=1; for (int i=1;i<=n;i++) { if (i==x||i==y||i==z||a[i]>87) continue; for (int v=10;v>0;v--) { dp[v]=dp[v]|(dp[v-1]<<a[i]); } } if (dp[10][87]==1) check[x][y][z]=true;}int main(){ int t,i,j,k,q,s[3]; scanf("%d",&t); while (t--) { scanf("%d",&n); for (i=1;i<=n;i++) { scanf("%d",&a[i]); } for (i=1;i<=n;i++) { for (j=i;j<=n;j++) { for (k=j;k<=n;k++) { check[i][j][k]=false; solve(i,j,k); } } } scanf("%d",&q); while (q--) { scanf("%d%d%d",&s[0],&s[1],&s[2]); sort(s,s+3); if (check[s[0]][s[1]][s[2]]) { printf("Yes\n"); } else printf("No\n"); } }}
0 0
- hdu5890
- hdu5890 bitset优化dp
- hdu5890 bitset 优化dp
- hdu5890 bitset优化DP
- hdu5890 Eighty seven(DP)
- HDU5890 Eighty seven (数位DP)
- hdu5890 Find small A 二进制
- hdu5890(二维01背包+bieset优化)
- hdu5890 bitset优化0/1背包
- hdu5890 Eighty seven(背包+bitset优化)
- 2016 ACM/ICPC Asia Regional Qingdao hdu5890 Eighty seven(DP+bitset优化妙用)
- 【hdu5890】【bitset+dp】Eighty seven【每次从序列中删掉第i,j,k个数后,是否存在一种选10个数和为87的方案】
- POJ1200
- C#的第19课的内容
- WINDOWS API——OPENCLIPBOARD——剪切板
- 递归扫描图片
- hdu5890
- 第四周 项目3-单链表建立(三)
- 文章标题
- 入门前言
- excel基础元素
- labview从登陆页面跳转到子页面方法一
- 绕圈拿红包的问题(动态规划)
- 第4周项目1-建立单链表
- 常见算法时间复杂度和空间复杂度