![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
NYOJ
文章平均质量分 73
_夜风
我好懒怎么办
展开
-
nyoj 17
// nyoj 17 代码如上,用的是dp,总的来说就是对一个字符串从末尾开始比较,设定一个数组,存放每个单调字串的最大长度,最后比较。。。//要注意的就是里面if语句对于每次字符比较后,更新数组,自己在纸上画画就清楚了。。。 #include #include using namespace std;int main(){ int i,原创 2014-12-11 14:37:30 · 413 阅读 · 0 评论 -
SGU131--NYOJ435
参考bloghttp://m.blog.csdn.net/blog/u012760629/36927465http://www.cppblog.com/menrowitianya/archive/2014/06/23/207386.htmlsgu131题意:给你一个n*m的矩形,可以填充1*2或者缺一角的2*2矩形,求填发?输入:n,m(n,m输出:原创 2015-07-17 19:59:35 · 504 阅读 · 0 评论 -
nyoj 76
#include using namespace std;int main(){ int i,t,n; int a[101]; cin>>t; while(t--) { cin>>n; if(n==1) cout<<"0"<<endl; else{ a[2]=1;原创 2014-12-11 17:44:42 · 446 阅读 · 0 评论 -
nyoj 623
#include using namespace std;int main(){ int a[51][51],b[51][51],c[51][51],i,j,k,l,m,n; while(cin>>m>>n>>k,m+n+k>0) { for(i=1;i<=m;i++) for(j=1;j<=n;j++)原创 2014-12-11 15:03:39 · 368 阅读 · 0 评论 -
nyoj 44
//nyoj 44//和上面一题一样,求子串和,但是代码非常简洁。。。。。 时间复杂度为n #include using namespace std;int main(){ int i,t,n,first,later; cin>>t; while(t--) { cin>>n>>first;原创 2014-12-11 12:52:41 · 362 阅读 · 0 评论 -
nyoj 36
//这一题是 nyoj 36 是一道求最长公共子序列的题,也是用dp做出来的核心代码也就是一句,题目大概思路是先找到两组字符串里面相同的字母在二维数组里面更新每次比较过后dp的值,空想很难理解,自己在纸上画画就知道了实在不行就把那段代码记下来。。。还有我一直都不明白为什么我把dp数组放在主函数和while里面编译不过,而且我一直都怀疑二维数组没赋初值,可以显示初始值,那还要原创 2014-12-11 14:38:37 · 371 阅读 · 0 评论 -
nyoj 42
#include #include #include #include using namespace std;int f[1000];int digree[1000];int find(int x){ while(x!=f[x]) x=find(f[x]); return x;}void bing(int a,int b){原创 2014-12-11 17:27:38 · 463 阅读 · 0 评论 -
nyoj 37
//nyoj 37 代码有点乱,和最长公共子序列很像,只是多加了一个数组,之前调用函数,一直超时,可是我看了下,为什么用一个整形数组存放倒置字符串竟然可以AC,我测试了下数据,打印出来的是一串地址,为什么为什么为什么啊。。。。#include #include #define Max(a,b) a>b?a:busing namespace std;int dp[100原创 2014-12-11 12:35:33 · 480 阅读 · 0 评论 -
nyoj 214
//nyoj 214这个题目和字符串的问题类似,都是给出一组数据,寻找最长的单调递增字符这一题一开始我用dp做,发现超时,看了下时间,n*n的复杂度,换过一种思路用类似于栈的方式,来存储每次更新过后的单调序列,里面二分查找很容易理解就是数组作用开始比较难理解,大致思路是先把输入数组的第一个元素放入Stack数组里然后一个for,从第二个元素开始,if每次判断和top顶元素大小,原创 2014-12-11 14:38:53 · 531 阅读 · 0 评论 -
背包问题小结
#include #include using namespace std;int main(){ int i,j,n,m,v,c[100100],w[100100],cnt[50001]; cin>>n; while(n--) { cin>>m>>v; for(i=1;i<=m;i++)原创 2014-12-10 23:00:57 · 406 阅读 · 0 评论 -
简单水池&&迷宫问题
#include #include #include using namespace std;int M[101][101],flag[101][101];int n,m;int cnt;void pool(int x,int y){ flag[x][y]=1; M[x][y]=cnt; if(x-1>=1&&M[x-1][y]!=0&原创 2014-12-11 15:05:27 · 377 阅读 · 0 评论 -
单调最长递增子序列
// 再一次复习 最长单调递增子序列dp求法// 以前有过一次专门的总结,现在有点忘了,拿出来看看// 目前为止,我做过的这类题目就1.最长子序列和 2.字母和数字单调最长序列。。。后面继续总结 #include #include #include #include using namespace std;int main(){ char原创 2014-12-11 12:46:59 · 377 阅读 · 0 评论 -
NYOJ737
题意:给n堆石子,按照顺序排列,只能相邻两堆石子合并,求最后合并为一堆时所花费的最小代价,石子合并代价为两堆石子之和。输入:n(石子堆数)Xi(每堆石子个数)输出:T(最小代价)思路:经典石子归并问题,区间DP,原谅我对DP并不怎么感冒,简单点来说,首先预处理记下i到j的石子总数,用数组存放,然后在DP的过程中,因为求解的是最小代价,我们可以这样想,先找出两原创 2015-07-20 15:29:32 · 534 阅读 · 0 评论