Simple programmation dynamique B - tarte libre (formation d'hiver)

Sujets exigences
HDU-1176
dit que le ciel ne tombera pas, mais une journée de marche de gameboy en bas de la maison de retour de piste, tombent soudainement du ciel beaucoup beaucoup de tarte. Prononce le caractère gameboy est merveilleux, cette tarte est pas ailleurs, ils se situent dans un rayon de 10 mètres à côté de lui. Si la tarte du sol, bien sûr manger, donc gameboy retirer immédiatement le sac du corps pour ramasser. Mais parce que les deux côtés de la piste ne peut pas se tenir debout, il ne peut donc prendre les sentiers. Comme l'ancien gameboy restent le plus souvent dans la salle pour jouer à des jeux, mais un maître agile dans le jeu, mais en réalité , le mouvement est particulièrement nerveux lent, et que dans le mobile par seconde ne dépasse pas une plage de mètres pour attraper la tarte tomber. Maintenant , la piste que les coordonnées de l' icône:

Insérer ici l'image Description
Afin de simplifier le problème, supposons que , dans la prochaine période de temps, ce qui tartes tombent 0-10 11 positions. debout Gameboy au début de ce 5, donc la première seconde, il a reçu seulement trois positions 4,5,6 dans une position où la tarte. Q gameboy peut prendre jusqu'à un certain nombre de tarte? ( En supposant que son sac à dos peut contenir un nombre infini de tarte)
l'entrée des
données d'entrée une pluralité d'ensembles. La première rangée de chaque ensemble de données à un nombre entier positif n (0 <n <100000) , il y a représente n pie sur ce chemin. jonction N vers le bas de la rangée, chaque rangée a deux nombres entiers x, t (0 <T < 100000), montre une pie de T secondes off au point x. La même seconde au même point peut tomber plus tarte. n = 0, l'extrémité d'entrée.
Sortie
de chaque ensemble de données d'entrée correspondant à une ligne de sortie. Délivrer en sortie un nombre entier m, m représente gameboy peut prendre jusqu'à une tarte.
Astuce: Entrer les données à cette question que la plus grande, recommande la lecture avec scanf, avec cin peut expirer.

L'entrée de l'échantillon
6.
. 5. 1
. 4. 1
. 6. 1
. 7 2
. 7 2
. 8. 3
0
l'échantillon de la sortie
. 4
objet de programmation dynamique principalement pour obtenir des équations dynamiques, la sélection de la valeur maximale entre les trois points et accumulé, puis répète ce processusdp[i][j]+=max(dp[i+1][j-1],max(dp[i+1][j],dp[i+1][j+1]))

#include <iostream>
#include <algorithm>
#include <math.h>
#include <stdio.h>
#include <string.h>
using namespace std;
int dp[150000][20];
int main()
{
    int n;
    while(scanf("%d",&n),n)
    {
        int i,j,t,x,sum=0;
        memset(dp,0,sizeof(dp));
        for(i=0;i<n;i++)
        {
            scanf("%d %d",&x,&t);
            dp[t][x+1]++;
            sum=max(sum,t);
        }
        for(i=sum-1;i>=0;i--)
            for(j=14;j>=0;j--)
            dp[i][j]+=max(dp[i+1][j-1],max(dp[i+1][j],dp[i+1][j+1]));
        printf("%d\n",dp[0][6]);
    }
    return 0;
}
Publié 38 articles originaux · a gagné les éloges 27 · vues 3167

Je suppose que tu aimes

Origine blog.csdn.net/qq_45891413/article/details/105257456
conseillé
Classement