HDU 1160 最长下降子序列(错误代码也可能通过,误导啊)
来源:互联网 发布:数据录入软件 编辑:程序博客网 时间:2024/06/06 05:53
写的代码有点垃圾,改天优化一下。
#include <iostream>#include <algorithm>using namespace std;const int N = 1001;int dp[N];int front[N];int p[N];typedef struct {int weight;int speed;int num;} mice;mice mouse[N];bool cmp(mice lhs, mice rhs){return lhs.weight < rhs.weight; //体重递增排序}int main(){int t = 0;while(cin >> mouse[t].weight >> mouse[t].speed){mouse[t].num = t + 1;t++;}sort(mouse, mouse + t, cmp);memset(dp, 0, sizeof(dp));memset(front, 0, sizeof(front));//最递减子序列for(int i = 0; i < t; i++){dp[i] = 1;front[i] = -1;for(int j = i - 1; j >= 0; j--){if(mouse[j].speed > mouse[i].speed && dp[j] + 1 > dp[i] && mouse[i].weight > mouse[j].weight){dp[i] = dp[j] + 1;front[i] = j;}}}int max = 0;for(int i = 0; i < t; i++)if(dp[i] > dp[max])max = i;cout << dp[max] << endl;int k = 0;while(front[max] != -1){p[k++] = mouse[max].num;max = front[max];}p[k++] = mouse[max].num;while(k--)cout << p[k] << endl;return 0;}
写了初始版本后,偷懒参考了一篇代码,该代码提交能够AC,但是我跟他一样写的(只是他qsort,我用的sort),导致了我输出的结果一直很怪异。郁闷了半天。
通过输出比较,我发现qsort的只是将重量排序,而sort将速度也排序,导致的结果不同。而根本原因是,该代码只是碰巧可以通过,如果题目换个测试例子,将重量也递减,是不可能通过的。所以正确的做法应该是要判断重量是否相同,相同则不考虑。 该代码没有考虑重量,居然AC,使我一直以为不用判断重量,ac不了。一字一句地对照了半天。
非吐槽不可了。
#include <stdio.h>#include <stdlib.h>struct No{int w;int s;int num;}a[1005];int cmp(const void *c,const void *d){return *(int *)c-*(int *)d;}int main (){int n=0,i,j,k,max;int m[1005],pre[1005],p[1005];while (scanf("%d %d",&a[n].w,&a[n].s)!=EOF){a[n].num=n+1;n++;}qsort(a,n,sizeof(a[0]),cmp);for (i=0;i<n;i++){m[i]=1;pre[i]=-1;for (j=i-1;j>=0;j--){if (a[j].s>a[i].s && m[j]+1>m[i]){m[i]=m[j]+1;pre[i]=j;}}}for (max=0,i=0;i<n;i++)if (m[i]>m[max]) max=i;printf("%d\n",m[max]);k=0;while (pre[max]!=-1){p[k++]=a[max].num;max=pre[max];}p[k++]=a[max].num;while (k--)printf ("%d\n",p[k]);return 0;}
- HDU 1160 最长下降子序列(错误代码也可能通过,误导啊)
- hdu 1160 FatMouse's Speed( 最长下降子序列 )
- hdu 1069 monkey and banana(最长下降子序列)
- HDU 1069(最长下降子序列)
- hdu 1069 最长下降子序列
- hdu 5532 Almost Sorted Array(最长上升(不下降)子序列和最长下降(不上升)子序列)
- 最长下降子序列
- 最长下降子序列
- 最长下降子序列
- 最长不下降子序列(二)
- HDU 1423 Greatest Common Increasing Subsequence(最长公共子序列+最长不下降子序列)
- HDU 6197 array array array(最长不下降子序列)
- 最长不下降子序列
- poj1887(最长下降子序列)
- 最长上升下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- STL源代码剖析个人总结5--STL仿函数
- 使用RAMDisk制作内存盘加快系统运行速度(并解决部分问题)
- C#在处理多线程更新到UI控件的多种方法
- [iis7]iis7站点设置默认文档后更新站点的web.config文件
- android 程序导航页面appguide的制作
- HDU 1160 最长下降子序列(错误代码也可能通过,误导啊)
- 传输基本知识,搞网络工程的需要知道的一些基本知识
- 线段树 HDU 2871 memory control
- MSFlexGrid与DataGrid 的异同
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- 枚举小记
- centos linux系统日志
- SHELL点滴
- FormatMessage 将 ErrorCode 转化成字符串