URAL 1260 Nudnik Photographer DFS DP

题目:click here

:这个题可以先dfs深搜下,规律dp

dfs:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define S second
 4 typedef long long ll;
 5 const int INF = 0x3f3f3f3f;
 6 const int M = 1e5+3;
 7
 8 int s;
 9 int cnt = 0;
10 bool vis[60];
11 void dfs( int last, int num )   {
12     if( num == s )  {
13         cnt++;
14         return ;
15     }
16     for( int i=2; i<s+1; i++ )
17         if( abs(last-i)<=2 && !vis[i] ) {
18             vis[i] = true;
19             dfs( i, num+1 );
20             vis[i] = false;
21         }
22 }
23 int main()  {
24     while( ~scanf("%d", &s ) )   {
25         memset( vis, false, sizeof(vis) );
26         cnt = 0;
27         vis[1] = true;
28         dfs( 1, 1 );
29         printf("%d\n", cnt );
30     }
31     return 0;
32 }

DP:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define F first
 4 #define S second
 5 typedef unsigned long long ll;
 6 const int INF = 0x3f3f3f3f;
 7 const int M = 1e5+3;
 8
 9 int s;
10 ll dp[60];
11 void pre()  {
12     memset( dp, 0, sizeof(dp) );
13     dp[1] = 1;
14     dp[2] = 1;
15     dp[3] = 2;
16     dp[4] = 4;
17     for( int i=5; i<=55; i++ )
18         dp[i] = dp[i-1]+dp[i-3]+1;
19 }
20 int main()  {
21     pre();
22     while( ~scanf("%d", &s ) )   {
23         printf("%I64d\n", dp[s] );
24     }
25     return 0;
26 }
时间: 2024-10-19 16:08:01

URAL 1260 Nudnik Photographer DFS DP的相关文章

ural 1260. Nudnik Photographer 规律dp

点击打开链接 1260. Nudnik Photographer Time limit: 1.0 second Memory limit: 64 MB If two people were born one after another with one second difference and one of them is a child, then the other one is a child too. We get by induction that all the people ar

递推DP URAL 1260 Nudnik Photographer

题目传送门 1 /* 2 递推DP: dp[i] 表示放i的方案数,最后累加前n-2的数字的方案数 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cmath> 7 #include <cstring> 8 using namespace std; 9 10 const int MAXN = 1e4 + 10; 11 const int INF = 0x3f3f3f3f; 12 int

Ural 1260 A nudnik photographer(DP)

A nudnik photographer 大意: 对1到N这些数进行排列,1必须要在最左边,相邻的两个数之间的差值不能超过2,问有多少种排列的方法. 思路: 对座位进行DP,当第一个是1,第二个是2的时候,组合为dp[i-1]:当第一个是1,第二个是3的时候,第三个也确定了是2,组合为dp[i-3]:还有最后一种情况是1357--8642. 所以DP方程为dp[i] = dp[i-1]+dp[i-3]+1. #include <stdio.h> int n; int dp[100]; int

timus 1260. Nudnik Photographer 动态规划

题目传送门 做完这题感觉dp像是一些状态在转移,由一个(多个)目前状态推到后一(多)个状态. 这个题目的意思是n个人要照相,n个人的年龄为1到n.站成一排,规定最左段是1岁的人,相邻两个人的年龄差不会超过2岁.问有多少总排队方案. 解法: 第i个人加入所产生的状态可以从第i-1个人加入产生的状态推过来.我们知道,第i个人至少会与i-1或i-2相邻.因此以[i-1]和[i-2]作为状态.可以分为四种状态: ① [i-1][i-2] 即 i-1,i-2相邻且i-1在i-2前 ②[i-2][i-1]

记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty

题目传送门 1 /* 2 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 3 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操作必然是1红1黑 4 考虑三种情况:a[]连续两个颜色相同,输出11:b[]连续两个相同,输出22: 5 a[x] != b[y], 输出12:否则Impossible 6 详细解释:http://blog.csdn.net/jsun_moon/article/details/10254

URAL 1167. Bicolored Horses (DP)

题目链接 题意 :农夫每天都会放马出去,然后晚上把马赶入马厩,于是让马排成一行入马厩,但是不想马走更多的路,所以让前p1匹入第一个马厩,p2匹马入第二个马厩…………但是他不想让他的任何一个马厩空着,所有的马都必须入马厩.有两种颜色的马,如果 i 匹黑马与 j 匹白马同在一个马厩,不愉快系数是 i * j,总系数就是k个系数相加.让总系数最小. 思路 : dp[i][j] 代表的是前 i 个马厩放 j 匹马的最小不愉快系数值. 1 //1167 2 #include <cstdio> 3 #in

URAL 1073 Square Country(DP)

题目链接 题意 :这个人要投资地,每块地都是正方形并且边长都是整数,他希望他要买的地尽量的少碎块.每买一块地要付的钱是边长的平方,而且会得到一个一份证书,给你一个钱数,让你求出能得到的证书个数. 思路 :其实就是求x12+x22+--+Xn2中的最小的n. 1 //1073 2 #include <stdio.h> 3 #include <iostream> 4 #include <math.h> 5 6 using namespace std ; 7 8 int a[

dfs+dp思想的结合------hdu1078

首先是题目的意思: 从一个正方形的0,0点开始走,只能横着走,竖着走,最多走k步,下一个点的数一定要比当前这个点的值大,每走一步,就加上下一个点的数据,问数据最大能有多少. 首先遇到这种题目,走来走去的,一开始想到的是搜索,但是搜索我们搜的很多是路径,能走到那个点的最短路,但是这道题目不一样. 首先要注意的一点是,如果没有条件的搜索,那就是枚举.只有搜遍了才能得到最后的解. 1s题,只是搜的话肯定TLE了. 所以我们想到的自然就是dp了.dp的好处是什么?就是能减少不必要的搜索.用已知的结果减少

HDU-4924-Football Manager(DFS+DP)

Problem Description Football Manager is a series of football management simulation games developed by Sports Interactive and published by Sega. In this game, you will play a role of a football club manager and conduct your team to chase championship