UVa 12063 (DP) Zeros and Ones】的更多相关文章

题意: 找出长度为n.0和1个数相等.没有前导0且为k的倍数的二进制数的个数. 分析: 这道题要用动态规划来做. 设dp(zeros, ones, mod)为有zeros个0,ones个1,除以k的余数为mod的二进制数的个数,则状态转移方程为: dp(zeros + 1, ones, (mod>>1) % k) += dp(zeros, ones, mod) dp(zeros, ones + 1, ((mod>>1)+1) % k) += dp(zeros, ones, mod)…
题意:给你n.k,问你有多少个n为二进制的数(无前导零)的0与1一样多,且是k的倍数 题解:对于每个k都计算一次dp,dp[i][j][kk][l]表示i位有j个1模k等于kk且第一位为l(0/1) 再次预处理mod[i][j]表示1的i次方模j等于几,具体看代码注释 import java.util.Scanner; public class Main{ static int Maxn=65; static int Maxk=101; //前i个数有j个1模给定的值余k且第一位为1或者0的总个…
https://vjudge.net/problem/UVA-12063 题意: 统计n为二进制数中,0和1相等且值为m的倍数的数有多少个 dp[i][j][k] 前i位二进制 有j个1 值模m等于k  的数的个数 最高位强制填1,所以实际只需要dp n-1位 #include<cstdio> #include<cstring> using namespace std; ][][]; int main() { int T,n,m; long long ans; scanf(&quo…
#include<bits/stdc++.h> #include<stdio.h> #include<iostream> #include<cmath> #include<math.h> #include<queue> #include<set> #include<map> #include<iomanip> #include<algorithm> #include<stack&g…
大佬真的强!!https://blog.csdn.net/u014800748/article/details/45225881 #include<cstdio> #include<cstring> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; typedef long long ll; const int MAXN = 70; int mod[MAXN], n, k; ll…
http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=4147 题意:给定一个字符串,以及若干单词,求有几种方式能用单词组成字符串  我先是dp方程推得有问题不知怎么改动搞得卡了非常久,然后就是数组开得太小一直RE trie数组大小=单词个数*单词长度  dp[i]为以str[i]开头的后缀的ans.dp[i]=seg…
给个链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3215 题目大意是求有多少个n位二进制数,0和1的个数相等,并且是k的倍数. 这个dp一下就可以了,设f[i][j][l]为i位的mod k=j的有l个1 的数的个数. #include<iostream> #include<cstdio> #include…
UVA 11404 - Palindromic Subsequence 求给定字符串的最长回文子序列,长度一样的输出字典序最小的. 对于 [l, r] 区间的最长回文串.他可能是[l+1, r] 和[l, r-1]两个区间的结果. 或者当s[l] == s[r]时,区间[l+1, r-1]的结果再加上以s[l], s[r]为首尾的子序列. dp[l][r] = ans(dp[l][r-1], dp[l+1][r], s[l] + dp[l+1][r-1] + s[r])  dp存的是子序列,即一…
UVA 11552 - Fewest Flops 一个字符串,字符串每 k 个当作一组,组中的字符顺序能够重组.问经过重组后改字符串能够编程最少由多少块字符组成.连续的一段字符被称为块. dp[i][j] 表式第i组以字符j结尾的最少块数. 那么我们考虑加入一组后能够降低块数的情况. 1):上一组的结尾在这一组里找得到相同的字符,而且该字符不作为当前块的结尾. 假设要作为结尾的话要把该字符所在的块拆开.所以然并卵. 2):当前组仅仅有一种字符,而且和上一组的结尾相同. 这两种情况都能够使块数减一…
题意:有n个数据,给定k,要从中选出k+8个三元组(x,y,z,其中x<=y<=z),每选一次的代价为(x-y)^2,求最小代价和. [解题方法] 将筷子按长度从大到小排序 排序原因: 由于一组中A<=B<=C 选第i根筷子作为A时,必然要选第i-1根作为B,否则不会达到最优 dp[i][j]表示选了对于前j根筷子选了i个筷子集合时的最小花费 设c[j]为选j作为A,j-1作为B时的花费(c[j]=(w[i]-w[i-1])^2;),状态转移如下: dp[i][j] = min(…