精准扶贫网站建设的意义吴忠北京网站建设
精准扶贫网站建设的意义,吴忠北京网站建设,怎么建立一个网站域名,网站建设实训作业POJ1189
http://poj.org/problem?id1189
怎么说呢#xff0c;不算难#xff0c;但是容易出问题
我一开始的思路是#xff0c;第一个钉子只有一种情况#xff0c;然后下面每个钉子#xff1a;左边有钉子就加左边的情况数#xff0c;右边有钉子就加右边的情况数#x…POJ1189
http://poj.org/problem?id1189
怎么说呢不算难但是容易出问题
我一开始的思路是第一个钉子只有一种情况然后下面每个钉子左边有钉子就加左边的情况数右边有钉子就加右边的情况数上边没钉子就加就加上上面的情况。加情况均是因为小球可以到这里
我们想到的就是概率问题这样用情况数量做的话情况数量统计的确实没错我想最后把某个位置情况除以总情况就好了其实是不行的因为每种情况发生的概率是不一样的这就是我失败的原因。
后来想到其他方法假设开始就有n个球然后每次遇到钉子就分散也就是数量减少一半其他一样也就是说左右有钉子都只加上数量的一半这就解决了概率问题。
dp可以“人人为我”或者“我为人人”这种思路明显是人人为我如果是我为人人推的话会更加简洁对于每个钉子
1、下面有钉子的时候dp[i1][j]dp[i][j]/2,dp[i1][j1]dp[i][j]/2
2、下面没钉子时dp[i2][j1]dp[i][j]
操作简单不贴代码
UVA 12511
题意最长公共上升子序列LIS对你没有听错就是最长上升子序列两个序列公共的LCS。
思想结合一下咯
LIS设DP[i]表示以第i个数字结尾的最长上升子序列的长度
DP[i]max(DP[j]1){1ji-1}LCS设DP[i][j]表示以A串第i个字符结尾以B串第j个字符结尾的最长字串
当a[i]b[j]时DP[i][j]DP{i-1][j-1]1;
当a[i]!b[j]时DP[i][j]max(DP[i-1][j],DP[i][j-1])LCIS设DP[i][j]表示以a串前i个字符b串的前j个字符且以b[j]为结尾构成的LCIS的长度
当a[i]!b[j]时DP[i][j]DP[i-1][j]
当a[i]b[j]时DP[i][j]max(DP[i-1][k])1 1kj-1 b[j]b[k]
这个值得贴代码
#includeiostream
#includecstdio
#includestring
#includestring.h
#includecstring
#includecmath
#includesstream
#includeiomanip
#includealgorithm
#includevector
using namespace std;
int dp[1005][1005],a[1005],b[1005],i,j,t,n1,n2,maxn;
int main()
{ scanf(%d,t); while(t--){ scanf(%d,n1); for(i1;in1;i) scanf(%d,a[i]); scanf(%d,n2);for(i1;in2;i) scanf(%d,b[i]); memset(f,0,sizeof(f)); for(i1;in1;i) { maxn0; for(j1;jn2;j) { dp[i][j]dp[i-1][j];//不相等if (a[i]b[j]maxndp[i-1][j]) maxndp[i-1][j];//更新maxnif (a[i]b[j]) dp[i][j]maxn1;//相等} } maxn0; for(i1;in2;i)if(maxndp[n1][i])maxndp[n1][i];printf(%d\n,maxn);}return 0;
}
HDU2845
http://acm.hdu.edu.cn/showproblem.php?pid2845
题意给出nm的矩阵 如果选择了其中一个格子就可以得到该格子上的权值
但是它左边和右边的格子就不能选 然后上下两行的格子也不能选择 很简单的dp 无非是选择与不选择 对于每一行来说 选择了j1的路径 或者 选择j2的路径
而j2的路径可以得到当前点的权值
然后对于每一列来说也是选择i-1的行或者是i-2的行的路径即可
#includeiostream
#includestdio.h
#includecstdio
using namespace std;
#define maxn 222222
int x[maxn],y[maxn];
int main(){int n,m,ox;while(~scanf(%d%d,n,m)){for(int i2;in1;i){for(int j2;jm1;j){scanf(%d,ox);x[j]max(x[j-1],x[j-2]ox);}y[i]max(y[i-1],y[i-2]x[m1]);}printf(%d\n,y[n1]);}return 0;
}K Multiple Longest Commom Subsequence
http://newoj.acmclub.cn/contests/1359/problem/6
题意最长公共子序列要求序列每个元素重复k次比如1122重复两次111222重复三次。
输入两个字符串和k输出长度。
最长公共子序列的一个变形。。。
动态规划。设dp[i][j]表示a串处理到i位置b串处理到j位置的答案。预处理出从a串i位置向前数第k个与i位置数 字相同的位置p[i]用相同方式处理出B串的q[i]。 则转移方程为dp[i][j]max(dp[i-1][j],dp[i][j-1],dp[i-p[i]][j-q[j]]1),其中第三种转移必须在a[i]b[j]的情况下转移。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86025.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!