[UVALive 6661 Equal Sum Sets] (dfs 或 dp)
来源:互联网 发布:联通网络报修 编辑:程序博客网 时间:2024/05/03 10:56
题意:
求从不超过 N 的正整数当中选取 K 个不同的数字,组成和为 S 的方法数。
1 <= N <= 20 1 <= K<= 10 1 <= S <= 155
解题思路:
DFS:
由于N,K,S的范围很小。直接DFS即可。
/*ID: wuqi9395@126.comPROG:LANG: C++*/#include<map>#include<set>#include<queue>#include<stack>#include<cmath>#include<cstdio>#include<vector>#include<string>#include<fstream>#include<cstring>#include<ctype.h>#include<iostream>#include<algorithm>#define INF (1<<30)#define PI acos(-1.0)#define mem(a, b) memset(a, b, sizeof(a))#define For(i, n) for (int i = 0; i < n; i++)typedef long long ll;using namespace std;int n, k, s;int cnt = 0;void dfs(int sum, int x, int depth) { if (sum > s) return ; if (k - 1 == depth) { if (sum == s) cnt++; return ; } for (int i = x + 1; i <= min(n, s - sum); i++) dfs(sum + i, i, depth + 1);}int main () { while(scanf("%d%d%d", &n, &k, &s)) { if (n + k + s == 0) break; cnt = 0; for (int i = 1; i <= n; i++) { dfs(i, i, 0); } printf("%d\n", cnt); }}
DP:
dp[i][j][k] = dp[i - 1][j][k] + dp[i - 1][j - i][k - 1] //dp[i][j][k]表示从不超过i的数字中选取k个数和为j的方法数。
/*ID: wuqi9395@126.comPROG:LANG: C++*/#include<map>#include<set>#include<queue>#include<stack>#include<cmath>#include<cstdio>#include<vector>#include<string>#include<fstream>#include<cstring>#include<ctype.h>#include<iostream>#include<algorithm>#define INF (1<<30)#define PI acos(-1.0)#define mem(a, b) memset(a, b, sizeof(a))#define For(i, n) for (int i = 0; i < n; i++)typedef long long ll;using namespace std;int dp[22][160][11];int n, k, s;int main () { dp[0][0][0] = 1; for (int i = 1; i <= 20; i++) { for (int j = 0; j <= 155; j++) { for (int k = 0; k <= 10; k++) { dp[i][j][k] = dp[i - 1][j][k]; if (k > 0 && j >= i) dp[i][j][k] += dp[i - 1][j - i][k - 1]; } } } while(scanf("%d%d%d", &n, &k, &s), n || k || s) printf("%d\n", dp[n][s][k]);}
0 0
- [UVALive 6661 Equal Sum Sets] (dfs 或 dp)
- UVALive 6661 Equal Sum Sets
- UVALive 6661 - Equal Sum Sets (类似硬币的DP问题)
- UvaLive 6661 Equal Sum Sets 二进制枚举/DP
- 6661 Equal Sum Sets(DP)
- Equal Sum Sets (DFS)
- LA 6661 —— Equal Sum Sets(DP)
- Equal Sum Sets
- UVALive6661 Equal Sum Sets
- Equal Sum Sets
- B - Equal Sum Sets
- 416. Partition Equal Subset Sum (dp)
- leetcode 416. Partition Equal Subset Sum 动态规划DP + DFS深度优先遍历
- Leetcode 416 - Partition Equal Subset Sum(dp)
- HDU 3280 Equal Sum Partitions(区间DP)【模板】
- hdu 3280 Equal Sum Partitions (区间dp)
- HDU1584(dfs回溯 或 区间dp)
- 1053. Path of Equal Weight (30) -- dfs (leetcode 113. Path Sum II)
- [Unity3D]关于Android真机调测Profiler
- Java 8特性探究(1):通往lambda之路
- POJ1007 for the first time
- linux:激活第一个CPU
- 【环境配置】配置AndroidStudio
- [UVALive 6661 Equal Sum Sets] (dfs 或 dp)
- Scramble String
- android应用开发全程实录-你有多熟悉listview?
- Struts多个配置文件,如何配置web.xml
- iOS获取键盘的高度
- 经纬财富:铜陵支撑和阻力位,可小区间操作
- C++基础学习教程(六)----类编写的前情回顾以及项目实战(1)
- Kruskal算法
- c语言exit和return区别,在fork和vfork中使用