NYOJ
文章平均质量分 73
_夜风
我好懒怎么办
展开
-
nyoj 17
// nyoj 17 代码如上,用的是dp,总的来说就是对一个字符串 从末尾开始比较,设定一个数组,存放每个单调字串的最大长度,最后比较。。。 //要注意的就是里面if语句对于每次字符比较后,更新数组,自己在纸上画画就清楚了。。。 #include #include using namespace std; int main() { int i,原创 2014-12-11 14:37:30 · 422 阅读 · 0 评论 -
SGU131--NYOJ435
参考blog http://m.blog.csdn.net/blog/u012760629/36927465 http://www.cppblog.com/menrowitianya/archive/2014/06/23/207386.html sgu131 题意:给你一个n*m的矩形,可以填充1*2或者缺一角的2*2矩形,求填发? 输入: n,m(n,m 输出:原创 2015-07-17 19:59:35 · 513 阅读 · 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 · 453 阅读 · 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 · 375 阅读 · 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 · 368 阅读 · 0 评论 -
nyoj 36
//这一题是 nyoj 36 是一道求最长公共子序列的题,也是用dp做出来的 核心代码也就是一句,题目大概思路是先找到两组字符串里面相同的字母 在二维数组里面更新每次比较过后dp的值,空想很难理解,自己在纸上画画就知道了 实在不行就把那段代码记下来。。。 还有我一直都不明白为什么我把dp数组放在主函数和while里面 编译不过,而且我一直都怀疑二维数组没赋初值,可以显示初始值,那还要原创 2014-12-11 14:38:37 · 379 阅读 · 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 · 473 阅读 · 0 评论 -
nyoj 37
//nyoj 37 代码有点乱,和最长公共子序列很像,只是多加了一个数组,之前调用函数, 一直超时,可是我看了下,为什么用一个整形数组存放倒置字符串 竟然可以AC,我测试了下数据,打印出来的是一串地址,为什么为什么为什么啊。。。。 #include #include #define Max(a,b) a>b?a:b using namespace std; int dp[100原创 2014-12-11 12:35:33 · 487 阅读 · 0 评论 -
nyoj 214
//nyoj 214 这个题目和字符串的问题类似,都是给出一组数据,寻找最长的单调递增字符 这一题一开始我用dp做,发现超时,看了下时间,n*n的复杂度,换过一种思路 用类似于栈的方式,来存储每次更新过后的单调序列,里面二分查找很容易理解 就是数组作用开始比较难理解,大致思路是先把输入数组的第一个元素放入Stack数组里 然后一个for,从第二个元素开始,if每次判断和top顶元素大小,原创 2014-12-11 14:38:53 · 542 阅读 · 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 · 414 阅读 · 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 · 388 阅读 · 0 评论 -
单调最长递增子序列
// 再一次复习 最长单调递增子序列dp求法 // 以前有过一次专门的总结,现在有点忘了,拿出来看看 // 目前为止,我做过的这类题目就1.最长子序列和 2.字母和数字单调最长序列。。。后面继续总结 #include #include #include #include using namespace std; int main() { char原创 2014-12-11 12:46:59 · 384 阅读 · 0 评论 -
NYOJ737
题意:给n堆石子,按照顺序排列,只能相邻两堆石子合并,求最后合并为一堆时所花费的最小代价,石子合并代价为两堆石子之和。 输入: n(石子堆数) Xi(每堆石子个数) 输出: T(最小代价) 思路:经典石子归并问题,区间DP,原谅我对DP并不怎么感冒,简单点来说,首先预处理记下i到j的石子总数,用数组存放,然后在DP的过程中,因为求解的是最小代价,我们可以这样想,先找出两原创 2015-07-20 15:29:32 · 542 阅读 · 0 评论