455E. Function

作者在 2014-08-09 20:16:50 发布以下内容

地址:http://codeforces.com/problemset/problem/455/E

给你1个递归公式让你算出f(i,j)的值

 

  • f(1, j) = a[j], 1 ≤ j ≤ n.
  • f(i, j) = min(f(i - 1, j), f(i - 1, j - 1)) + a[j], 2 ≤ i ≤ n, i ≤ j ≤ n.

做了一下没做出来,才发现原来只有17个人过了...还是先放放吧!

下面是我的代码先贴着,样例能过,但是某些数据就死循环了,可能是递归的时候,有出口没考虑到吧...

#include <stdio.h>
#include <algorithm>
using namespace std;

int a[10005], t[10005];

int f(int i, int j, int n)
{
    if(i == 1 && 1 <= j && j <= n) return a[j];
    if(i >= 2 && i <= n && i <= j && j <= n)
        return min(f(i - 1, j - 1, n), f(i - 1, j, n)) + a[j];
}

int main(int argc, char *argv[])
{
    int n, m, v1, v2;
    while(scanf("%d", &n) != EOF)
    {
        for(int i = 1; i <= n; scanf("%d", &a[i++])) ;
        scanf("%d", &m);
        for(int i = 1; i <= m; i++)
        {
            scanf("%d%d", &v1, &v2);
            t[i] = f(v1, v2, n);
        }
        for(int i = 1; i <= m; printf("%d\n", t[i++])) ;
    }
    return 0;
}

 

Codeforces | 阅读 1265 次
文章评论,共0条
游客请输入验证码
浏览9427次
文章归档
最新评论