程序还是要多写啊。。。debug了好久才ac,唉~
#include<iostream>
#include<vector>
#include<algorithm>
#include<stack>
using namespace std;
const int maxn=12;
struct pp
{
int w,s;
int num;
int back;
bool operator < (const pp &cmp) const
{
if(w != cmp.w)
{
return w < cmp.w;
}
else
{
return s < cmp.s;
}
}
bool operator == (const pp &cmp) const
{
if(w == cmp.w && s == cmp.s)
{
return true;
}
else
{
return false;
}
}
}px;
vector<pp>v,vp;
stack<int>s;
int x,y,temp,t2,tmax;
int dp[1<<maxn];
int tmaxn=1;
int ti=1;
int main()
{
v.clear();
vp.clear();
memset(dp,0,sizeof(dp));
while(scanf("%d%d",&x,&y)!=EOF)
{
px.w=x;
px.s=y;
px.num=ti++;
vp.push_back(px);
}
sort(vp.begin(),vp.end());
v.push_back(vp[0]);
for(int i=1;i<vp.size();i++)
{
if(vp[i] == v.back())
{
continue;
}
else
{
v.push_back(vp[i]);
}
}
dp[0]=1;
v[0].back=-1;
tmax=0;
for(int i=1;i<v.size();i++)
{
temp=-1;
t2=0;
for(int j=i-1;j>=0;j--)
{
if(v[i].s<v[j].s)
{
if(dp[j]>t2)
{
temp=j;
t2=dp[j];
}
}
}
if(temp==-1)
{
dp[i]=1;
v[i].back=-1;
}
else
{
dp[i]=t2+1;
v[i].back=temp;
if(dp[i]>dp[tmax])
{
tmax=i;
}
}
}
cout<<dp[tmax]<<endl;
s.push(tmax);
while(v[s.top()].back!=-1)
{
s.push(v[s.top()].back);
}
while(!s.empty())
{
cout<<v[s.top()].num<<endl;
s.pop();
}
return 0;
}
分享到:
相关推荐
杭电hdu acm资料所用杭电的acm题
hdu_2102_passed_sorce
杭电 hdu acm 第1084题的解法,ac过了,是一位学长教我的.内有一些中文说明.
HDU_ACM培训课件(完整版) HDU_ACM培训课件(完整版) HDU_ACM培训课件(完整版) HDU_ACM培训课件(完整版)
此程序为hdu的acm2010题,就是解决水仙花数问题
模式识别_hdu_期末复习资料集合_试卷笔记.zip
HDU_ACM_1002_大数相加C源代码,利用字符串处理
数字图像处理_hdu_期末复习资料_试卷等.zip
高级计算机图形学_mm的_重点笔记_hdu_吴xy.pdf
数字图像处理总ppt_hdu_许老师.pdf
HDU一部分题目原码,大部分是可运行的,可能有几题不完整
B_(HDU_1231)(最大子段和,分治).cpp
杭电acm解题报告 详细解析2000-2099 适合acm初学者
杭电OJ部分答案,可以很简单的解决a+b求和问题及其他问题。
hdu题解的答案十分简单的一个题,思路清晰,特别简单
For a positive integer n, let’s denote function f(n,m) as the m-th smallest integer x that x>n and gcd(x,n)=1. For example, f(5,1)=6 and f(5,5)=11. You are given the value of m and (f(n,m)?...
hdu 3378 三国杀标程 解题报告
动态规划DP题解 POJ HDU部分动态规划DP题解
基础算法类 ACM 入门 杭电OJ 11页题目题解,算法入门的时候刷题可以参考 搜集整理起来了比单个去搜题解方便快捷
里面包含:实验1~8的源代码,ISE软件直接导入就能使用、课件PPT、3份实验报告、实验要求与评分标准。