The monkey sleeps at night. 特殊疑问句用when does the monkey sleep?还是用what time?区别是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了The monkey sleeps at night. 特殊疑问句用when does the monkey sleep?还是用what time?区别是啥?相关的知识,希望对你有一定的参考价值。

what time是提问具体时间点,它前面都说是at night了,是一个时间段,所以用when 参考技术A When 什么时候 对时间提问
What time 几点钟 对具体的几点钟提问
参考技术B when does the monkey sleep?
后者比较广泛

动态规划第七届山东省省赛 Feed the monkey

Feed the monkey


题目大意:
有三种水果,分别是香蕉 n 1 n_1 n1个,桃子 n 2 n_2 n2个,苹果 n 3 n_3 n3个。小猴子要吃水果,每天可以吃其中一个,但是不能连续 d 1 d_1 d1天吃香蕉,连续 d 2 d_2 d2天吃桃子,连续 d 3 d_3 d3天吃苹果。求小猴子吃完所有水果的方案数。

解题思路:
动态规划。
设状态 f [ i ] [ j ] [ k ] [ s ] f[i][j][k][s] f[i][j][k][s]表示香蕉剩余 i i i个,桃子剩余 j j j个,苹果剩余 k k k个且以 s s s结尾时的方案数。
则只需分别考虑以三种水果结尾的方案数,最后求和即为最终答案。
假设以香蕉结尾,则状态转移方程式为:

s为1 ~ min(i,d1)之间的整数
f[i - s][j][k][0] += f[i][j][k][1]+f[i][j][k][2]

看着状态转移方程式很容易想明白。(本蒟蒻做的时候从前向后考虑了,没想出来转移方程

AcCoding:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 60;
ll f[N][N][N][3];//f[i][j][k][s]表示香蕉剩余i个,桃子剩余j个,苹果剩余k个且以s结尾的方案数
//其中s表示三种水果之一
int main() 
	int t; scanf("%d", &t);
	while (t--) 
		int n1, n2, n3, d1, d2, d3;
		scanf("%d%d%d%d%d%d", &n1, &n2, &n3, &d1, &d2, &d3);
		memset(f, 0, sizeof f);
		for (int i = n1;i >= 0;i--) 
			for (int j = n2;j >= 0;j--) 
				for (int k = n3;k >= 0;k--) 
					//以香蕉结尾的方案数
					for (int s = 1; s <= min(i, d1);s++) 
						if (i == n1 && j == n2 && k == n3) (f[i - s][j][k][0] = f[i][j][k][0] + 1) %= mod;
						else 
							(f[i - s][j][k][0] += f[i][j][k][1] + f[i][j][k][2]) %= mod;
						
					
					//以桃子结尾的方案数
					for (int s = 1; s <= min(j, d2);s++) 
						if (i == n1 && j == n2 && k == n3) (f[i][j - s][k][1] = f[i][j][k][1] + 1) %= mod;
						else 
							(f[i][j - s][k][1] += f[i][j][k][0] + f[i][j][k][2]) %= mod;
						
					
					//以苹果结尾的方案数
					for (int s = 1; s <= min(k, d3);s++) 
						if (i == n1 && j == n2 && k == n3) (f[i][j][k - s][2] = f[i][j][k][2] + 1) %= mod;
						else 
							(f[i][j][k - s][2] += f[i][j][k][0] + f[i][j][k][1]) %= mod;
						
					
				
			
		
		ll res = (f[0][0][0][0] + f[0][0][0][1] + f[0][0][0][2]) % mod;
		printf("%lld\\n", res);
	
	return 0;

参考文献:https://blog.csdn.net/txgANG/article/details/69968378

以上是关于The monkey sleeps at night. 特殊疑问句用when does the monkey sleep?还是用what time?区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

to the monkey and the frog.for an eternity of ten thousand tales.什么意思?

The monkey is smart的同义句

2015 USP-ICMC gym 100733 I. The Cool Monkeys

UVa 11167 Monkeys in the Emei Mountain (最大流)

动态规划第七届山东省省赛 Feed the monkey

动态规划第七届山东省省赛 Feed the monkey