问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减少b的整数数列可能有多少种呢? 输入格式 输入的第一行包含四个整数 n s a b,含义如前面说述. 输出格式 输出一行,包含一个整数,表示满足条件的方案数.由于这个数很大,请输出方案数除以100000007的余数. 样例输入 4 10 2 3 样例输出 2 样例说明 这两个数列分别是2 4 1 3…
传送门   历届试题 波动数列   时间限制:1.0s   内存限制:256.0MB     锦囊1   锦囊2   锦囊3   问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减少b的整数数列可能有多少种呢? 输入格式 输入的第一行包含四个整数 n s a b,含义如前面说述. 输出格式 输出一行,包含一个整数,表示满足条件的方案数.由于这个数很…
学习时间不长,记录的只是学习过程的思路和想法,不能保证正确,代码可以在acwing上AC. 01背包问题: 1.首先是简单的01背包问题 2.先确定状态,f[i][j]表示有第i件物品,时间为j的最大价值. 3.第i件物品取时f[i][j]=f[i-1][j-W[i]]+V[i],第i件物品不取时f[i][j]=f[i-1][j],物品只有取与不取两种情况,所以两个值取一个最大值即可 4.保证不重不漏的考虑了所有情况,f[n][m]就是答案. 4.放一个二维的简单写法,以及一维的优化写法. #i…
算法提高 01背包 时间限制:1.0s 内存限制:256.0MB 问题描述 给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个. 输入格式 输入的第一行包含两个整数n, m,分别表示物品的个数和背包能装重量. 以后N行每行两个数Wi和Vi,表示物品的重量和价值 输出格式 输出1行,包含一个整数,表示最大价值. 样例输入 3 5 2 3 3 5 4 7 样例输出 8 数据规模和约定 1<=N<=200,M<=5000. im…
这题很暴力的一个DP,d[i][j]表示前i个数对选择一些Ai的和为j的最大Bi和. 状态转移方程: dp[i][j]=max(dp[i][j],dp[i-1][j-sc[i].a]+sc[i].b); AC代码 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int inf=1<<28; const int maxn=200002; int…
问题描述 Fibonacci数列的递推公式为:Fn=Fn-+Fn-,其中F1=F2=. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数. 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单. 样例输入 样例输出 样例输入 样例输出 数据…
  在一个 n \times mn×m 中的方格中,每个格子上都有一个分数,现在蒜头君从 (1,1)(1,1) 的格子开始往 (n, m)(n,m) 的格子走.要求从 (x_1,y_1)(x1​,y1​) 到 (x_2,y_2)(x2​,y2​) ,满足 x_2 \ge x_1,\ y_2 \ge y_1x2​≥x1​, y2​≥y1​ .请问蒜头君从 (1,1)(1,1) 的点到 (n,m)(n,m) 最多可以得多少分? 每个格子的分数只能得到一次,其中 (1,1)(1,1) 和 (n,m)(…
问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整数n. 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000. 输出格式 输出一行,按从小到大的顺序输出排序后的数列. 样例输入 5 8 3 6 4 9 样例输出 3 4 6 8 9 这题调用Arrays.sort方法即可 import java.util.Arrays; import java.util.Scanner; public class Main { publi…
示例代码: #include <stdio.h>#include <stdlib.h> int main(void){ int n = 0 ; int i = 0 , j = 0 , min = 0; int *num ; scanf("%d",&n); num = (int*)malloc(sizeof(int)*n); for (i = 0 ; i < n ; i ++) { scanf("%d",&num[i]);…
示例代码: #include <stdio.h>#include <stdlib.h> int main(void){ int n = 0 ; int i = 0 ,  max = 0 , min = 0 , sum = 0; int* num; scanf("%d",&n); num = (int *)malloc(sizeof(int)*n); for (i = 0 ; i < n ; i ++) { scanf("%d",…