hdoj 5677 ztr loves substring
来源:互联网 发布:mac魅可官网 编辑:程序博客网 时间:2024/05/16 11:56
这是一场BC里的题,虽然这套题非常辣鸡,但这题对我来说还是有学习价值的。
首先是暴力跑一下,统计一下不同长度的回文串分别有多少个,然后就是跑存在性的多重背包了,二进制思想不错!
#include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> #include <string> #include <string.h> #include <memory.h> #include <vector> #include <queue> #include <stack> using namespace std;#define ll long long char str[111];int cnt[111];bool dp[111][111];int main(){ int T; cin>>T; while(T--){ memset(cnt,0,sizeof(cnt)); int N,K,L; cin>>N>>K>>L; for(int i=1;i<=N;i++){ scanf("%s",str); int len = strlen(str); //odd for(int i=0;i<len;i++){ int l = 0; for(int l=0;;l++){ if(i-l<0 || i+l==len){ break; } if(str[i-l]==str[i+l]){ cnt[l*2+1]++; }else{ break; } } } //even for(int i=0;i<len-1;i++){ int l = 0; for(int l=0;;l++){ if(i-l<0 || i+l+1==len){ break; } if(str[i-l]==str[i+l+1]){ cnt[l*2+2]++; }else{ break; } } } } //dp数组: 用了几个串 当前长度 的可达性 memset(dp,0,sizeof(dp)); dp[0][0] = 1; for(int i=1;i<=100;i++){ if(dp[K][L]){ break; } //二进制拆解 int num = cnt[i]; int kk = 1; if(!num)continue; while(kk < num){ for(int j=K;j>=kk;j--){ for(int k=L;k>=i*kk;k--){ if(dp[j-kk][k-i*kk]){ dp[j][k] = 1; } } } num -= kk; kk<<=1; } if(!num)continue; for(int j=K;j>=num;j--){ for(int k=L;k>=i*num;k--){ if(dp[j-num][k-i*num]){ dp[j][k] = 1; } } } } if(dp[K][L]){ printf("True\n"); }else{ printf("False\n"); } } return 0;}
0 0
- hdoj 5677 ztr loves substring
- HDOJ-5677 ztr loves substring
- hdoj 5677 ztr loves substring 【Manacher + 多重背包】
- HDOJ 5677 ztr loves substring(Manacher+背包型DP)
- HDU 5677 ztr loves substring
- hdu 5677-ztr loves substring
- hdu 5677 ztr loves substring
- HDU 5677 ztr loves substring (dp)
- hdoj ztr loves substring 5677 (多重背包+母函数)好题
- hdu 5677 ztr loves substring【回文Manacher+多重背包】
- hdoj-5675-ztr loves math
- hdoj 5675 ztr loves math 【数学】
- hdoj 5676 ztr loves lucky numbers 【二分】
- HDOJ 5675-ztr loves math【数学】
- HDU 5677 ztr loves substring(回文串加多重背包)
- ztr loves substring ( Manacher算法 + 多重背包)
- HDOJ 5676 ztr loves lucky numbers (贪心+数位DP)
- hdoj ztr loves lucky numbers 5676 (dfs模拟)
- 讲义四 包的理解
- 让requirejs不自动添加.js后缀
- 安装和使用 Linux Mysql笔记
- tornado入门 - 登陆与cookie
- 关于做好一个项目
- hdoj 5677 ztr loves substring
- Ubuntu 16.04 下使用FileZilla工具无法显示中文目录及文件名的解决方法
- PHP关于Ajax返回多个json数据的处理
- Java---类反射(1)---类反射入门和基础
- 年后跳槽全过程总结(上)——从面试准备到拿到offer
- 操作系统的收获
- gradle 学习系列教程1-gradle安装
- JAVA GUI的介绍
- C++11智能指针完整理解