`

HDU 1028 Ignatius and the Princess III .

阅读更多

Ignatius and the Princess III

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4658    Accepted Submission(s): 3263

Problem Description
"Well, it seems the first problem is too easy. I will let you know how foolish you are later." feng5166 says.

"The second problem is, given an positive integer N, we define an equation like this:
  N=a[1]+a[2]+a[3]+...+a[m];
  a[i]>0,1<=m<=N;
My question is how many different equations you can find for a given N.
For example, assume N is 4, we can find:
  4 = 4;
  4 = 3 + 1;
  4 = 2 + 2;
  4 = 2 + 1 + 1;
  4 = 1 + 1 + 1 + 1;
so the result is 5 when N is 4. Note that "4 = 3 + 1" and "4 = 1 + 3" is the same in this problem. Now, you do it!"
 

 

Input
The input contains several test cases. Each test case contains a positive integer N(1<=N<=120) which is mentioned above. The input is terminated by the end of file.
 

 

Output
For each test case, you have to output a line contains an integer P which indicate the different equations you have found.
 

 

Sample Input
4 10 20
 

 

Sample Output
5 42 627
 

 

Author
Ignatius.L
 
做呢题……我领略到思考层层推进果种魅力,同埋果种快感{=__, =}
呢题其实就系组合数学里面既自然数拆分吧,而且最大都只不过系120,所以我首先念到DFS:
 
DFS(int x, int bx);
 
x为剩余大小,bx为拆分既上一个数字,例如: 4 = 3 + 1   递归到DFS(1, 3) 当前剩余大小为1,上一个拆分数为3,
bx可以保证拆分无重复,可以参考题目,但系发觉50+就已经超时鸟{=   =}
跟住呢个时候我捻到用一维数组做记忆化DFS:
 
int dp[MAXI];
 
dp[x]表示数字x既拆分方法有几种,甘样当递归到DFS(int x, int bx)时如果dp[x] > 0就可以直接返回dp[x]。
所以我就直接加入判断:
 
if (dp[x]) return dp[x];
 
但系呢个时候有个问题就系,拆分既前一个数bx必须不小于x,先正可以直接返回dp[x],所以我又加入判断:
 
if (dp[x] && dp[x] <= bx) return dp[x];
 
但系,都中系超时窝,跟住我就捻到一个例子:10 = 1 + .... 即系当x > bx既时候,会一直递归落去,例如120既全1拆分
就会递归120层,呢种情况我无优化到,所以超时鸟。
跟住我捻到可吾可以构造一个二维数组:
 
int dp[i][j];
 
呢个数组记录既系数i第一个拆分数为j既时候拆分方法有几种,点解会甘捻?其实原因真系好简单,因为我地宜家要解决
既问题系x > bx即剩余大小大于前一个拆分数既情况,举个例子:
 
10 = 2 + .......
 
其实姐系DFS(8, 2)既情况,因为呢个时候x > bx 所以会进入2~1既循环,继续递归,但系!其实问题可以转化为:
 
10 = 2 + {8 = 2 + .......}
 
姐系10第一个拆分数为2既情况其实就系等于8第一个拆分数为2既情况,即dp[8][2]!!,所以如果我地知道dp[8][2],就可以
直接加上而唔洗继续DFS(6, 2),所以我就系循环果度加入判断:
 
if (!dp[x][i]) dp[x][i] = DFS(x - i, i);
tsu += dp[x][i];
 
不过呢个时候又出现一个问题,就系如果一开始就DFS(n, n)系无用既,因为dp并无记录n以下既数据,所以我地要做既就系从
1开始做DFS递推上去!
 
for (i = 0; i <= n; i++) dp[i][i] = DFS(i, i);
 
最后其实我地不必每次输入都做一次DP,其实初始化做一次,我地就已经保存左所有答案。
 
for (i = 0; i <= 120; i++) dp[i][i] = DFS(i, i);
 
每次输入就直接输出dp[n][n]即可,即系俗称打表。
 
下面AC代码:
 
4277486 2011-07-28 13:31:08 Accepted 1028 0MS 296K 595 B C++ 10SGetEternal{(。)(。)}!
#include <iostream>
#include <vector>
using namespace std;
#define MAXI 122

int dp[MAXI][MAXI], n;

int DFS(int x, int bx)
{
    int i;
    int tsu = 0;

    if (dp[x][x] && x <= bx) return dp[x][x];
    for (i = bx; i >= 1; i--)
    {
        if (!dp[x][x - i]) 
            dp[x][x - i] = DFS(x - i, i);
        tsu += dp[x][x - i];
    }
    
    return tsu;
}

int main()
{
    int i, j;

    for (i = 0; i <= MAXI; i++)
            for (j = 0; j <= MAXI; j++ )
                dp[i][j] = 0;
    for (dp[0][0] = i = 1; i <= MAXI; i++)
        dp[i][i] = DFS(i, i);
    while (scanf("%d", &n) != EOF) printf("%d\n", dp[n][n]);

    return 0;
}

 当然我呢种捻法比较复杂,其实自然数拆分可以直接计算,不过我想讲既系思考既层层递进,真会系好爽生气

分享到:
评论

相关推荐

    HDU-GO v19.1225.2.zip

    【HDU-GO v19.1225.2.zip】是一个针对杭州电子科技大学(HDU)选课系统的浏览器插件,版本号为v19.1225.2。这个插件的主要功能是优化和提升学生在进行网络选课时的体验,它可能包含了增强界面、自动化操作、数据解析...

    HDUACM2010版03递推求解.ppt

    HDUACM2010版03递推求解.ppt

    HDU李竹_Zjooc数图在线作业.rar

    本资源为HDU数字图像处理课程 浙江省在线平台的视频课后作业 仅供参考 假设我们有一个mat型的单通道图像,命名为srcMat,我们想得到第i行,第j列的像素值则可以用一下的代码 A. int value= srcMat.at(i)(j)[0];  B...

    ACM HDU 1404 Digital Deletions(博弈).docx

    【ACM HDU 1404 Digital Deletions(博弈)】 这是一道与博弈论相关的编程竞赛题目,来自HDU(杭州电子科技大学在线评测系统)。游戏名为“数字删除”,是一个双人对战的游戏。游戏规则如下: 1. 游戏开始时,玩家...

    hdu-page-11-answer.rar_hdu_hdu oj第十一页_page_搜题_杭电oj

    本资料"HDU Page 11 Answer"正是针对杭电OJ中第11页的题目,提供了一系列题解,旨在帮助初学者快速掌握基础算法,并提升编程能力。 一、ACM入门基础知识 ACM竞赛强调的是团队协作和快速解决问题的能力,其核心是...

    杭电操作系统实验 HDU操作系统实验.zip

    杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU...

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    大学期间操作系统实验-HDU操作系统实验.zip

    HDU操作系统实验.zip大学期间操作系统实验-HDU操作系统实验.zip大学期间操作系统实验-HDU操作系统实验.zip大学期间操作系统实验-HDU操作系统实验.zip大学期间操作系统实验-HDU操作系统实验.zip大学期间操作系统实验-...

    HDU图论题目分类

    * 题目1026:Ignatius and the Princess I,涉及到完全搜索的概念。 2. 图的遍历:深度优先搜索(DFS)、广度优先搜索(BFS)等。 * 题目1043:Eight,涉及到多种解决方法。 * 题目1044:Collect More Jewels,涉及...

    hdu动态规划算法集锦

    题目链接:[Robberies](http://acm.hdu.edu.cn/showproblem.php?pid=2955) - **问题描述**:这是一道典型的0-1背包问题变种,考虑如何最大化抢劫金额,且不会被抓住。 - **解题思路**: - 定义状态$f[j]$表示在第$...

    hdu5102.zip_K.

    标题中的"hdu5102.zip_K."暗示这是一个与编程竞赛相关的题目,通常在HDU(杭州电子科技大学)在线判题系统中出现。这个题目可能是一个编程挑战,要求参赛者解决一个特定的问题,并提交源代码以供自动评判。"K."可能...

    HDU1019(2028)解题报告

    nm where m is the number of integers in the set and n1 ... nm are the integers. All integers will be positive and lie within the range of a 32-bit integer. Output For each problem instance, output a ...

    HDU.rar_hdu_hdu07_com_shownv9b_www.563hdu.

    【标题】"HDU.rar_hdu_hdu07_com_shownv9b_www.563hdu." 暗示这是一个与HDU(杭州电子科技大学在线编程平台)相关的压缩包,其中可能包含了该平台上的编程竞赛题目或练习题目的源代码。"hdu07"可能是某个特定题目的...

    DP46题.doc

    9. **Monkey And Banana**(题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069) 类似于最大递增子序列和,但要考虑猴子跳跃的限制。状态方程为:`f[j]=max{f[i]}+v[j]`,其中`0,`w[i][j]`,`h[i][j]`。 ...

    HDU 2000-2099 解题报告.CHM

    解题报告|ACM|程序设计参考程序以及题目的分析

    hdu.rar_hdu

    "hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在HDU上解决过的题目代码集合。这些代码通常包含了对各种算法的应用,例如排序、搜索、图论、动态规划等,对于学习算法和准备编程竞赛的初学者来说是一份宝贵...

    code_hdu.rar_ACM_The First_hdu_test case example

    You are given the value of m and (f(n,m)?n)⊕n, where ``⊕’’ denotes the bitwise XOR operation. Please write a program to find the smallest positive integer n that (f(n,m)?n)⊕n=k, or determine it ...

    hangdianACM.rar_hangdiana_hdu acm_www.hangdianacm_杭电

    这个压缩文件包含的是作者个人提交并解决的ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)题目,这些题目来源于HDU的在线编程平台。 【描述】"杭电的一些acm题目,都是我自己一个一...

    kuangbin acm模板超级好用

    2.18.1 HDU4656 卷积取模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.19 其它公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.19.1 Polya . . . ....

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

Global site tag (gtag.js) - Google Analytics