题目一:m种球中购买总计n个球的策略数
你现在需要购买n个乒乓球,超市中提供了m种不同的球,由于对第一种特别喜爱,因此至少买一个。求不同的购买方案对10^9+7取模的结果。如果2种购买方案在某种球数量上不同,则认为属于不同方案
输入描述:
一行两个数字n, m
1<=n,m<=1000
输入:
2 2
输出:
2
说明:
2种方案位(1,1)和(1,2)
题解一
考虑动态规划
# dp[n][m]代表:从m个球种购买共计n个的结果
# 假设以求的种类m作为变量推导公式,即假设出dp[n][m]=f(dp[n][m-1])
# 其中dp[n][m-1]代表的是在m-1种球中买n个的结果
# 那么可以认为dp[n][m]=dp[n][m-1]+k (这里直接将递推公式想成加法,没有依据,只是尝试)
# k代表了,球的种类从m-1变成m种,即增加一种之后,结果的增量
# 由于dp[n][m-1]中所统计的策略是“不含有第m种球”的,购买n个球的结果,所以
# 增量k的含义应该是“买n个球的策略中,至少购买了1个第m种球”的策略数量
# 由此,可以在n个球中,分出一个位置用于购买第m种球(对应的是“至少购买一个”或者说“存在”)
# 所以k=dp[n-1][m]
# 递推公式为dp[n][m]=dp[n][m-1]+dp[n-1][m]
# 由于该递推公式中,m一定是从1开始的,也就是“至少购买一个第m种球”中所指的m,是第2种及其以后的种类,所以不必为题中的附件条件单独处理
题目二
给定一张n个点m条边的无向带权图,保证图联通。定义一条路径的花费为这条路径上边权最大的边的权值。统计图上不同的节点对的数量,满足他们之间所有路径的最小花费恰好为k。两个点之间的路径可能有多条,只需要找到花费最小的那条。
输入描述:
第一行3个正整数n,m,k
接下来m行,每行3个正整数x,y,v表示节点x,y之间有一条权值为v的边。
输入
5 4 3
1 2 1
1 3 2
1 4 3
1 5 3
输出
3
说明
满足要求的点对为(1,4)(3,4)(2,4)
本文解析了两道经典算法题目,一是动态规划求解购买球的策略数,二是图论中寻找特定路径对的计数问题。通过详细的步骤和思路阐述,帮助读者理解算法背后的逻辑。
261

被折叠的 条评论
为什么被折叠?



