[HDU 1422]重温世界杯(DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1422

思路:DP,状态f[i]保存到达第i个城市口袋里的钱和最多能访问到的城市个数,用序列型DP的思想处理,按照终点进行DP即可

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>

#define MAXN 200010

using namespace std;

struct node
{
    int num,v; //v=到达第i个城市时口袋里的钱,num=到达第i个城市时最多访问的城市个数
}f[MAXN];

int cnt[MAXN]; //cnt[i]=在第i个城市时多得到的钱

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF&&n)
    {
        memset(f,0,sizeof(f));
        for(int i=1;i<=n;i++)
        {
            int money,cost;
            scanf("%d%d",&money,&cost);
            cnt[i]=money-cost;
            cnt[i+n]=money-cost;
        }
        f[1].v=cnt[1];
        if(f[1].v>=0) f[1].num=1;
        else f[1].num=0;
        if(n>=2)
        {
            for(int i=2;i<=2*n;i++)
            {
                if(f[i-1].v>=0)
                {
                    if(f[i-1].v+cnt[i]>=0)
                    {
                        f[i].v=f[i-1].v+cnt[i];
                        f[i].num=f[i-1].num+1;
                        if(f[i].num>=n) break;
                    }
                    else
                    {
                        f[i].v=cnt[i];
                        if(cnt[i]>=0) f[i].num=1;
                        else f[i].num=0;
                    }
                }
                else
                {
                    f[i].v=cnt[i];
                    if(cnt[i]>=0) f[i].num=1;
                    else f[i].num=0;
                }
            }
        }
        int ans=0;
        for(int i=1;i<=2*n;i++)
            if(ans<f[i].num)
                ans=f[i].num;
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-08-03 07:38:33

[HDU 1422]重温世界杯(DP)的相关文章

HDU 1422 重温世界杯 基础DP 好题

重温世界杯 Problem Description 世界杯结束了,意大利人连本带利的收回了法国人6年前欠他们的债,捧起了大力神杯,成就了4星意大利.世界杯虽然结束了,但是这界世界杯给我们还是留下许多值得回忆的东西.比如我们听到了黄名嘴的3分钟激情解说,我们懂得了原来可以向同一个人出示3张黄牌,我们还看到了齐达内的头不仅能顶球还能顶人…………介于有这么多的精彩,xhd决定重温德国世界杯,当然只是去各个承办世界杯比赛的城市走走看看.但是这需要一大比钱,幸运的是xhd对世界杯的热爱之情打动了德国世界杯

hdu 1422 - 重温世界杯(解题报告)

重温世界杯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5407    Accepted Submission(s): 1859 Problem Description 世界杯结束了,意大利人连本带利的收回了法国人6年前欠他们的债,捧起了大力神杯,成就了4星意大利. 世界杯虽然结束了,但是这界世界杯给我们还是留下许多值得回忆的东西.

HDU 1422 重温世界杯--(最长子序列模型,bug)

题意:按照输入的城市序列的顺序环游世界,每个城市有补助和花费,如果补助大于花费,你可以保存剩下的钱以后还能用,如果补助加上你保存的钱小于花费则停止旅游.求最多能去多少城市 分析:这题跟求最长子序列差不多,dp[i]表示走第i个城市时最多经过的城市的数量,如果第i个城市的花费够用那么 dp[i]=dp[i-1]+1,复杂度是 O(n) 这题主要卡在:1.TLE.原因是输入输出用的cin,cout换成标准输入输出就好了 2.WA.以前经过的城市没用完的费用可以留着以后用,这需要用一个tmp保存:城市

hdu 1422 重温世界杯

很简单,没什么好说的,和最长上升序列一个类型 #include<iostream> #define maxn 200000+5 using namespace std; int n,x,y; int mapp[maxn]; int main() { cin.sync_with_stdio(false); mapp[0]=0; while(cin>>n) { for(int i=1;i<=n;i++) { cin>>x>>y; mapp[i]=x-y;

【HDOJ】1422 重温世界杯

简单题. 1 #include <stdio.h> 2 3 #define MAXN 100005 4 5 int wi[MAXN], li[MAXN]; 6 int diff[MAXN<<1]; 7 8 int main() { 9 int n, total, max; 10 int i, tmp; 11 12 while (scanf("%d", &n) != EOF) { 13 for (i=0; i<n; ++i) { 14 scanf(&

hdu 1422 环状最大非负子段

题意: 一个列数,构成环形,找出其中满足每走一步都大于等于0的子段的最大长度 解法: 类似环形都是用两个数组相接的方式来实现的,不过看了别人代码发现没有必要,多开一倍空间,直接对下标进行取余操作就可以达到理想效果. 我是枚举环的起点(从0到n - 1),然后每个起点开始的长度为n的序列,用类似最大连续子串和的方法求出其最大子串长度,这样复杂度是O(n2) 有更好的思路:自己把这两倍长度的序列(0到2n - 1),来求最长满足条件的子段(注意子段长度达到n就退出,要不然会求出错),这个思路没有管一

HDU 4960 (水dp)

Another OCD Patient Problem Description Xiaoji is an OCD (obsessive-compulsive disorder) patient. This morning, his children played with plasticene. They broke the plasticene into N pieces, and put them in a line. Each piece has a volume Vi. Since Xi

HDU 1087 &amp;&amp; POJ 2533(DP,最长上升子序列).

~~~~ 两道题的意思差不多,HDU上是求最长上升子序列的和,而POJ上就的是其长度. 貌似还有用二分写的nlogn的算法,不过这俩题n^2就可以过嘛.. ~~~~ 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1087 http://poj.org/problem?id=2533 ~~~~ HDU1087: #include<cstdio> #include<cstring> #include<algorithm> #

hdu 2296 aC自动机+dp(得到价值最大的字符串)

Ring Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3180    Accepted Submission(s): 1033 Problem Description For the hope of a forever love, Steven is planning to send a ring to Jane with a rom