hdu 4223 Dynamic Programming? (dp)

//连续的和的绝对值最小
# include <stdio.h>
# include <string.h>
# include <algorithm>
# include <math.h>
using namespace std;
int main()
{
    int t,i,j,num,n,min1;
    int sum[1010],a[1010];
    int cas=0;
    while(~scanf("%d",&t))
    {
        while(t--)
        {
            scanf("%d",&n);
            for(i=0; i<n; i++)
                scanf("%d",&a[i]);
            min1=999999999;
            for(i=0; i<n; i++)
            {
                sum[i]=abs(a[i]);
                num=a[i];
                for(j=i-1; j>=0; j--)
                {
                    num=num+a[j];
                    if(sum[i]>abs(num))
                        sum[i]=abs(num);
                }
                if(min1>sum[i])
                    min1=sum[i];
            }
            printf("Case %d: %d\n",++cas,min1);
        }
    }
    return 0;
}

时间: 2024-10-10 14:19:52

hdu 4223 Dynamic Programming? (dp)的相关文章

hdu 4223 Dynamic Programming?

Dynamic Programming? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description Dynamic Programming, short for DP, is the favorite of iSea. It is a method for solving complex problems by breaking them down

hdu分类 Dynamic Programming(这是一场漫长的旅途)

下面是difficulty 1的题 1003   Max Sum 最长递增子序列.非常经典,最棒的解法是在线算法O(n)的复杂度. 贴的呢,是用dp做的代码. 先是一个高亮的dp递推式,然后找到最大处,用k记录.即所求的子序列的结尾,之后倒推,用减法推出子序列的开头位置. 要注意的点就是各个变量的初始化,初始化不好,很容易WA.还有找子序列的头的时候,倒推的时候找到等值的数是不跳出的,但是更新gx的值,因为0的存在. 1 #include <iostream> 2 #include <c

Dynamic Programming (DP) 问题总结

所有的 DP 问题都可以简单得用 Recursion 的方式实现.这通常是最容易想到的思路. 问题是这种实现不够 efficient,存在 subproblem 被重复计算的情况.有两种解决这个问题的方法: 1. 很直观的,在 naive recursion 里加入 一个 save 的环境,把每个 subproblem 计算出的值存起来.这种方式也叫 Top-down approach. 2. Bottom-up approach: 上面的方法的思路是从大问题开始,计算的时候发现需要小问题的解,

动态规划-Dynamic Programming(DP)

动态规划 动态规划方法心得 ? 动态规划是一般的面试.笔试中的高频算法题,熟练掌握必要的.动态规划的中心思想是在解决当前问题时,可以由之前已经计算所得的结果并结合现在的限制条件递推出结果.由于此前的计算结果已经保留下来,所以极大的缩短了时间复杂度. ? 解决动态规划问题的关键是找出状态表达式,即如何由之前的结果推导出现在的结果.另外,有的问题有很多限制条件增加问题的难度,需要剥丝抽茧,将问题解决.在找到状态表达式后,分为三步解决问题: 一. 定义内存空间,用来保存每步结果,并根据题目初始化,有些

Dynamic Programming 动态规划

Dynamic Programming DP 的历史渊源: Richard E. Bellman (1920-1984) Richard Bellman received the IEEE Medal of Honor, 1979. "Bellman . . . explained that he invented the name 'dynamid programming' to hide the fact that he was doing mathe-matical research at

Speeding Up The Traveling Salesman Using Dynamic Programming

转自:https://medium.com/basecs/speeding-up-the-traveling-salesman-using-dynamic-programming-b76d7552e8dd Using dynamic programming to speed up the traveling salesman problem! A large part of what makes computer science hard is that it can be hard to kn

HDU 4972 A simple dynamic programming problem(推理)

HDU 4972 A simple dynamic programming problem 题目链接 推理,会发现只有前一个和当前一个分数为(1, 2)或(2, 1)的时候,会有两种加分方法,其他情况最多就一种情况,所以只要统计(1, 2),(2, 1)的个数,最后判断分差是否为0,如果不为0,那么可能是正或负,那就是两倍 代码: #include <cstdio> #include <cstring> const int N = 100005; int t, n, a[N]; i

hdu 4972 A simple dynamic programming problem(高效)

题目链接:hdu 4972 A simple dynamic programming problem 题目大意:两支球队进行篮球比赛,每进一次球后更新比分牌,比分牌的计数方法是记录两队比分差的绝对值,每次进球的分可能是1,2,3分.给定比赛中的计分情况,问说最后比分有多少种情况. 解题思路:分类讨论: 相邻计分为1-2或者2-1的时候,会对应有两种的的分情况 相邻计分之差大于3或者说相等并且不等于1的话,为非法输入 其他情况下,不会造成新的比分情况产生 对于最后一次比分差为0的情况,就没有谁赢谁

hdu 4972 A simple dynamic programming problem (转化 乱搞 思维题) 2014多校10

题目链接 题意:给定一个数组记录两队之间分差,只记分差,不记谁高谁低,问最终有多少种比分的可能性 分析: 类似cf的题目,比赛的时候都没想出来,简直笨到极点..... 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <vector> 7 #include &