【DP】FatMouse's Speed
来源:互联网 发布:淘宝哪家银店真的吗 编辑:程序博客网 时间:2024/05/24 20:07
FatMouse believes that the fatter a mouse is, the faster it runs. To disprove this, you want to take the data on a collection of mice and put as large a subset of this data as possible into a sequence so that the weights are increasing, but the speeds are decreasing.
Input Specification
Input contains data for a bunch of mice, one mouse per line, terminated by end of file.
The data for a particular mouse will consist of a pair of integers: the first representing its size in grams and the second representing its speed in centimeters per second. Both integers are between 1 and 10000. The data in each test case will contain information for at most 1000 mice.
Two mice may have the same weight, the same speed, or even the same weight and speed.
Output Specification
Your program should output a sequence of lines of data; the first line should contain a number n; the remaining n lines should each contain a single positive integer (each one representing a mouse). If these n integers are m[1], m[2],..., m[n]then it must be the case that
W[m[1]] < W[m[2]] < ... < W[m[n]]and
S[m[1]] > S[m[2]] > ... > S[m[n]]In order for the answer to be correct, n should be as large as possible.
All inequalities are strict: weights must be strictly increasing, and speeds must be strictly decreasing. There may be many correct outputs for a given input, your program only needs to find one.
Sample Input
6008 13006000 2100500 20001000 40001100 30006000 20008000 14006000 12002000 1900
Output for Sample Input
44597
先按题意排序,然后动态规划就OK了。
#include<cstdio>
#include<cstring>
#include<stack>
#include<algorithm>
using namespace std;
struct mice
{
int w,s,n;
}m[1005];
int len[1005],indx[1005];
bool cmp(const struct mice &a,const struct mice &b)
{
if(a.w==b.w)
return a.s>b.s;
else
return a.w<b.w;
}
int main()
{
int n,temp,maxx;
stack<int> s;
for(n=0;scanf("%d%d",&m[n].w,&m[n].s)!=EOF;++n)
m[n].n=n;
memset(len,0,sizeof(len));
memset(indx,0,sizeof(indx));
sort(m,m+n,cmp);
len[0]=1;
for(int i=1;i<n;++i)
{
maxx=0;
for(int j=0;j<i;++j)
if(len[j]>maxx&&m[i].w>m[j].w&&m[i].s<m[j].s)
{
temp=j;
maxx=len[j];
}
if(maxx!=0)
indx[i]=temp;
len[i]=(maxx+1);
}
maxx=-1;
for(int i=0;i<n;++i)
if(len[i]>maxx)
maxx=len[temp=i];
printf("%d\n",maxx);
int k=temp;
for(;indx[k]!=0;k=indx[k])
s.push(m[k].n+1);
s.push(m[k].n+1);
for(;!s.empty();s.pop())
printf("%d\n",s.top());
return 0;
}
- 【DP】FatMouse's Speed
- FatMouse's Speed(dp)
- FatMouse's Speed(dp)
- zoj 1108 FatMouse's Speed(DP)
- hdu 1160 FatMouse's Speed (DP)
- hduoj1160,FatMouse's Speed,贪心+DP
- HDU 1160 FatMouse's Speed DP
- HDU 1160 FatMouse's Speed(DP)
- HDU 1160 FatMouse's Speed(dp)
- HDU 1160 FatMouse's Speed--经典DP
- HDU 1160 FatMouse's Speed DP题解
- HDU 1160 FatMouse's Speed(DP)
- HDU 1160 FatMouse's Speed(DP)
- hdu 1160 FatMouse's Speed dp
- 【HDU】 1160 FatMouse's Speed (DP)
- dp hdu 1160 FatMouse's Speed
- HDU---1160-FatMouse's Speed (DP)
- HDU 1160 FatMouse's Speed(DP)
- 表单验证的一些东西
- 第九周实验报告1
- 抽奖
- Oracle Database Control 浏览器无法登录解决
- C++程序设计实验报告(六十一)---第九周任务5
- 【DP】FatMouse's Speed
- windows下查看某个端口被哪个程序占用的方法
- hdu 2845 Beans
- C/C++中赋值语句的返回值问题
- GeekOS学习(8)链表操作宏
- ssh
- JDBC增删改查MVC
- zoj 3610
- 杭电_3790_最短路径问题