UvaLive6661

PDF题目

题意:让你用1~n中k个不同的数组成s,求有多少种组法。

题解:

DFS或者DP或打表。

1.DFS 由于数据范围很小,直接dfs每种组法统计个数即可。

 //#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll __int64
#define usint unsigned int
#define mz(array) memset(array, 0, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(int i=0;i<(n);i++)
#define FOR(i,x,n) for(int i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1biao.out","w",stdout) const int maxn=;
bool h[maxn];
int ans;
int n,k,s;
void dfs(int x,int sum,int start) {
if(sum>s) return;
if(x==k) {
if(sum==s) ans++;
return;
}
for(int i=start; i<=n; i++) {
if(h[i]==false) {
h[i]=true;
dfs(x+,sum+i,i+);
h[i]=false;
}
}
return;
} int farm() {
memset(h,,sizeof(h));
ans=;
dfs(,,);
return ans;
} int main() {
while(scanf("%d%d%d",&n,&k,&s)!=EOF) {
if(n== && k== && s==) break;
//cout<<n<<','<<k<<','<<s<<endl;
printf("%d\n",farm());
}
return ;
}

2.DP

dp[i][k][j]代表用1~i中的数中的k个组成j的种类数。

dp[i][k][j]=dp[i-1][k][j] + dp[i-1][k-1][j-i],加号左边是继承1~i-1的种类数(因为1~i的种类数包括1~i-1的种类数),加号右边是给那些由k-1个数组成的种类加上i得到j的种类。

 //#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll __int64
#define usint unsigned int
#define mz(array) memset(array, 0, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(int i=0;i<(n);i++)
#define FOR(i,x,n) for(int i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1biao.out","w",stdout)
int n,k,s;
int dp[][][]; int main() {
int i,j,k;
int maxj;
mz(dp);
dp[][][]=;
for(i=; i<=; i++) {
for(k=; k<=; k++) {
dp[i][k][]=dp[i-][k][];
maxj=(i+i-k+)*k/;///此i和k能打到的最大的j
for(j=; j<=maxj; j++) {///dp[i][k][j],用数1~i中的k个组成j的种类数
dp[i][k][j]=dp[i-][k][j];///继承
if(j>=i) dp[i][k][j] += dp[i-][k-][j-i];///没i的状态加上i
}
}
}
while(scanf("%d%d%d",&n,&k,&s)!=EOF) {
if(n== && k== && s==) break;
//cout<<n<<','<<k<<','<<s<<endl;
printf("%d\n",dp[n][k][s]);
}
return ;
}

3.DP 空间降一维

dp[k][j]表示k个数组成j的种类数。

有一维要逆序for,防止同一i下重复计算。

 //#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll __int64
#define usint unsigned int
#define mz(array) memset(array, 0, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(int i=0;i<(n);i++)
#define FOR(i,x,n) for(int i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1biao.out","w",stdout)
int n,K,s;
int dp[][]; int main() {
int i,j,k;
int maxj;
while(scanf("%d%d%d",&n,&K,&s)!=EOF) {
if(n== && K== && s==) break;
mz(dp);
dp[][]=;
for(i=; i<=n; i++) {///用1到i中的数
for(k=K; k>; k--) {
for(j=i; j<=s; j++) {///dp[k][j],k个数组成数j的种类数
dp[k][j] += dp[k-][j-i];///没i的状态加上i
}
}
}
printf("%d\n",dp[K][s]);
}
return ;
}

4.打表

深搜怕超时可以怒打一表,只要不限制代码长度就随便过。

(代码太长了贴不上来)

UvaLive6661 Equal Sum Sets dfs或dp的更多相关文章

  1. [UVALive 6661 Equal Sum Sets] (dfs 或 dp)

    题意: 求从不超过 N 的正整数其中选取 K 个不同的数字,组成和为 S 的方法数. 1 <= N <= 20  1 <= K<= 10  1 <= S <= 15 ...

  2. UvaLive 6661 Equal Sum Sets (DFS)

    Let us consider sets of positive integers less than or equal to n. Note that all elements of a set a ...

  3. D.6661 - Equal Sum Sets

    Equal Sum Sets Let us consider sets of positive integers less than or equal to n. Note that all elem ...

  4. Equal Sum Sets

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=49406 题意: 输入n,k,s,求在不小于n的数中找出k个不同的数 ...

  5. UVALive 6661 Equal Sum Sets

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  6. HDU-3280 Equal Sum Partitions

    http://acm.hdu.edu.cn/showproblem.php?pid=3280 用了简单的枚举. Equal Sum Partitions Time Limit: 2000/1000 M ...

  7. POJ 1849 - Two - [DFS][树形DP]

    Time Limit: 1000MS Memory Limit: 30000K Description The city consists of intersections and streets t ...

  8. 698. Partition to K Equal Sum Subsets

    Given an array of integers nums and a positive integer k, find whether it's possible to divide this ...

  9. HDU 3280 Equal Sum Partitions(二分查找)

    Equal Sum Partitions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

随机推荐

  1. WinRAR命令行

    用法: rar <命令> -<开关 1> -<开关 N> <压缩文件> <文件...> <@列表文件...> <解压路径\ ...

  2. 计算机组成原理 及CPU,硬盘,内存三者的关系

    前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...

  3. xudyh的gcd模板

    hdu 5019 #include <cstdlib> #include <cctype> #include <cstring> #include <cstd ...

  4. Session对象

    Session对象用于存储在多个页面调用之间特定用户的信息.Session对象只针对单一网站使用者,不同的客户端无法互相访问.Session对象中止于联机机器离线时,也就是当网站使用者关掉浏览器或超过 ...

  5. Loadrunner在post请求的cookie中插入其它多个值

    有一个商城,提交订单的时候,需要在post请求的cookie中set一个code码,便于防刷 tijiao() { lr_think_time(); web_reg_save_param(" ...

  6. 为你解惑之WPF经典9问详解

    本文解答了关于WPF的9个最常见的问题.从某种意义上讲,这两种技术是相互关联的:它们都是关于界面表现的技术,更进一步的,Silverlight是基于WPF的,是它的一个子集.不仅从理论上介绍了这两种技 ...

  7. 如何执行一条命令在C#里面。Process

    Download source - 4.15 KB Introduction It is normal practice to open the Windows command prompt and ...

  8. 软件工程个人作业 - week1

    <构建之法>阅读疑惑: 如何寻找开发效率和性能的均衡点?显然开发效率强调封装,重视代码重用.但是遗憾的是代码重用往往泛化了数据特征,降低了效率. 如何“公平”分配工作?尤其是团队中人员参差 ...

  9. RMQ模板

    RMQ:范围最小值问题.给出一个n个元素的数组A1,A2,...,An,设计一个数据结构支持查询操作Query(L,R):计算min{AL,AL+1,...,AR}. 每次用一个循环来求最小值显然不够 ...

  10. 【原】使用webpack打包的后,公共请求路径的配置问题

    在我们公司,和后台接接口时,公共的请求路径我们是单独抽出来的,放在一个独立的public.js中,在public.js中存入那个公共变量 公共变量是这样 在其他地方使用ajax时,我们就这样使用 这种 ...