dp求顺序hdu1160

题意是仅仅求一次的顺序。先依照速度从大到小排序,速度想等到按体重增序排列。

然后基本就变成了求已定顺序序列的最长递增序列递增,跟那个求一致最大序列和的基本一致。

dp【i】里存储的是到当前i最大的递增序列个数最大的数。

dp[i+1]就是在a【i+1】大于前面的a【j】的情况下,dp【i+1】=dp【j】+1;

输出的就是从最大的dp【】值从后往前输出,所以用了个栈改成从前往后。

以为题意仅仅输出一个正确序列就好。

思路是从開始的结构体排序。打一打就想出来的。bug,调了一天。确定dp【】最大值得时候和

须要记录角标。開始就弄混了,这个bug也是通过出数据找出来的。

第一次交没有输出序列个数,wa了2次。

ac代码:

#include<cstdio>
#include<algorithm>
#include<stack>
using namespace std;
stack<int > s;

struct mice
{
    int x,y,z;
    bool operator < (const mice&b ) const{

        if(y==b.y) return x<b.x;
        return y>b.y;
    }
}a[1010];
int dp[1010];
int main()
{
    int i=0;
    while(scanf("%d%d",&a[i].x,&a[i].y)!=EOF) {  a[i].z=i+1; i++; }
//    printf("\n");

//    printf("i==%d\n",i);

    sort(a,a+i);

//    for(int j=0;j<i;j++) printf("%d  %d  %d\n",a[j].x,a[j].y,a[j].z);

    int maxx = 0,maxIndex=0;

    for(int j=0;j<i;j++)
    for(int k=0;k<j;k++){
        if(a[k].x<a[j].x ) dp[j]=max(dp[k]+1,dp[j]);
        if(dp[j]>maxx) { maxx = dp[j]; maxIndex = j; }

    }
//    printf("maxx==%d\n",maxx);

//    for(int j=0;j<i;j++) printf("%d  ",dp[j]);
//    printf("\n");

//    printf("%d\n",a[maxx].z);
//    printf("%d\n",dp[maxx]+1);
    s.push(a[maxIndex].z);
        printf("%d\n",dp[maxIndex]+1);
//        printf("%d\n",a[maxIndex].z);
    dp[maxIndex]-=1;
    for(int k=maxIndex-1;k>=0;k--){

        if(dp[k]==dp[maxIndex]){
//                printf("%d\n",dp[k]);
//            printf("%d\n",a[k].z);

            s.push(a[k].z);
            dp[maxIndex]-=1;
        }
    }

    while(!s.empty()){
        printf("%d\n",s.top());
        s.pop();
    }

    return 0;
}
/**
1 5
1 3
2 4
2 2
3 3
4 4
1 3
4 2
5 1
^Z

1  5  1
2  4  3
4  4  6
1  3  2
1  3  7
3  3  5
2  2  4
4  2  8
5  1  9
0  1  2  0  0  2  1  3  4
4
5
3
1
*/
/**
1 5
1 3
2 4
2 2
3 3
4 4
1 3
4 2
5 1
^Z

1  5  1
2  4  2
3  3  3
4  2  4
5  1  5
0  1  2  3  4
5
1
2
3
4
5

*/
时间: 2024-10-05 04:25:16

dp求顺序hdu1160的相关文章

HDU 4405 Aeroplane chess (概率DP求期望)

题意:有一个n个点的飞行棋,问从0点掷骰子(1~6)走到n点需要步数的期望 其中有m个跳跃a,b表示走到a点可以直接跳到b点. dp[ i ]表示从i点走到n点的期望,在正常情况下i点可以到走到i+1,i+2,i+3,i+4,i+5,i+6 点且每个点的概率都为1/6 所以dp[i]=(dp[i+1]+dp[i+2]+dp[i+3]+dp[i+4]+dp[i+5]+dp[i+6])/6  + 1(步数加一). 而对于有跳跃的点直接为dp[a]=dp[b]; #include<stdio.h>

HDU4336-Card Collector(概率DP求期望)

Card Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2195    Accepted Submission(s): 1034 Special Judge Problem Description In your childhood, do you crazy for collecting the beautifu

树形DP求树的重心 --SGU 134

令一个点的属性值为:去除这个点以及与这个点相连的所有边后得到的连通分量的节点数的最大值. 则树的重心定义为:一个点,这个点的属性值在所有点中是最小的. SGU 134 即要找出所有的重心,并且找出重心的属性值. 考虑用树形DP. dp[u]表示割去u点,得到的连通分支的节点数的最大值. tot[u]记录以u为根的这棵子树的节点数总和(包括根). 则用一次dfs即可预处理出这两个数组.再枚举每个点,每个点的属性值其实为max(dp[u],n-tot[u]),因为有可能最大的连通分支在u的父亲及以上

ZOJ3329-One Person Game(概率DP求数学期望)

One Person Game Time Limit: 1 Second      Memory Limit: 32768 KB      Special Judge There is a very simple and interesting one-person game. You have 3 dice, namelyDie1, Die2 and Die3. Die1 hasK1 faces. Die2 has K2 faces.Die3 has K3 faces. All the dic

HDU3853-LOOPS(概率DP求期望)

LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Total Submission(s): 1864    Accepted Submission(s): 732 Problem Description Akemi Homura is a Mahou Shoujo (Puella Magi/Magical Girl). Homura wants to help h

树形dp求树的重心

Balancing Act http://poj.org/problem?id=1655 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<vector> 5 #define mt(a,b) memset(a,b,sizeof(a)) 6 using namespace std; 7 const int M=50010; 8 vector<int> g[

poj 1655 树形dp求取树的重心

http://poj.org/problem?id=1655 Description Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. Deleting any node from the tree yields a forest: a collection of one or more trees. Define the balance of a node to be the size of the large

bnu 12639 Cards (dp求期望)

bnu 12639 Cards dp求期望 区分 全局最优选择 和 当前最优选择. 本题是当前最优选择. 状态表示: double dp[16][16][16][16][5][5]; bool vis[16][16][16][16][5][5]; 状态下参数: vector<int> up, vector<int> tmp. so,记忆化搜索 + 回溯 //#pragma warning (disable: 4786) //#pragma comment (linker, &quo

HDU4405-Aeroplane chess(概率DP求期望)

Aeroplane chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1182    Accepted Submission(s): 802 Problem Description Hzz loves aeroplane chess very much. The chess map contains N+1 grids lab