题目描述:第一行:给你两个数m和n,m表示有m个数,然后下一行输入m个数,每个数只能选择一次,统计共有多少种情况使得所选数的和大于等于n;

解决本题我想到了两种方法,(题目自己想的,先不考虑超时),第一种dfs(题目自己想的,先不考虑超时)第二种:01背包问题;

dfs 由于递归的结束条件放错了导致最后结果中重复算了很多次,经过分析修改才得出结果;

第一种方法代码:

 #include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int ans;
int a[];
int m , n;
void dfs(int i,int sum)
{
if(i>=m)//一开始错了很久,写成了if(i>=m) return ;后来发现次数变多了
{
if(sum>=n)
{
//printf("sum == %d\n",sum);
ans++;
}
return ;
}
dfs(i+,sum); //要
dfs(i+,sum+a[i+]);//不要
}
int main()
{
while(cin>>m>>n)
{
ans = ;
for(int i = ;i<=m; i++)
scanf("%d",&a[i]);
dfs(,);
cout<<ans<<endl;
}
return ;
}

第二种方法动态规划:状态转移方程  dp[i][j] = dp[i-1][j] + dp[i-1][j-a[i]];

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = ;
int dp[N][N];
int a[];
int m , n;
int main()
{
while(cin>>m>>n)
{ int sum = ,ans = ;
for(int i = ;i<=m; i++)
{
scanf("%d",&a[i]);
sum = sum + a[i];
}
memset(dp,,sizeof(dp));
dp[][] = ;
for(int i = ; i<=m; i++)
{
for(int j = ;j<=sum;j++)
{
dp[i][j] = dp[i-][j]+dp[i-][j-a[i]];
//printf("i=%d j=%d %d\n",i,j,dp[i][j]);
}
}
ans = ;
for(int i = n;i<=sum;i++)
ans = ans +dp[m][i];
printf("%d",ans);
}
return ;
}

ny1189  题目描述:和上面的描述类似,只不过是把加号变成了 异或和而已,解题思想类似,数据量大,直接开辟数组,存不下,只能压缩,dfs必然会超时

代码:

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = ;
long long dp[][N];
long long a[];
int m , n;
int main()
{
int ma;
while(cin>>m>>n)
{ long long ma = ;
memset(dp,,sizeof(dp));
for(int i = ;i<=m; i++)
{
scanf("%lld",&a[i]);
ma=max(ma,a[i]);//每次都存储最大的值
}
dp[][] = ;
for(int i = ; i<=m; i++)
{ memset(dp[i%],,sizeof(dp[i%])); //只是用了两层的循环,这样很简单的减少了空间的用量
for(int j = ;j<=ma;j++)
{
dp[i%][j^a[i]] = dp[(i+)%][j]+dp[i%][j^a[i]];//要
dp[i%][j] = dp[i%][j] + dp[(i+)%][j];//不要
if(ma<(j^a[i]))
ma = (j^a[i]);
}
}
long long ans = ;
for(int i = n;i<=ma;i++)
ans = ans +dp[m%][i];
printf("%lld\n",ans);
}
return ;
}

一个简单题,引发的思索 + nyoj 1189的更多相关文章

  1. 一个JAVA题引发的思考

    转载自:http://www.cnblogs.com/heshan664754022/archive/2013/03/24/2979495.html 十年半山 今天在论坛闲逛的时候发现了一个很有趣的题 ...

  2. 一个简单问题引发对IEnumerable和IQueryable的思考

    问题概述:    首先看下图,有客户表和客户负责人表关系是多对多,访问数据库使用的是EF所以这里我们开启了延迟加载,需求就是将每个客户的所有负责人逗号拼接显示在负责人这一栏位, 对你没看错需求就是这么 ...

  3. 一个简单算法题引发的思考<DNA sorting>(about cin/template/new etc)

    首先是昨天在北京大学oj网上看到一个简单的算法题目,虽然简单,但是如何完成一段高效.简洁.让人容易看懂的代码对于我这个基础不好,刚刚进入计算机行业的小白来说还是有意义的.而且在写代码的过程中,会发现自 ...

  4. NYOJ 1009 So Easy[Ⅰ]【简单题】

    /* 题目大意:求三角形的外接圆 解题思路:c/sin(C)=2R,先求出cos,在求出sin 关键点:直接调用库 解题人:lingnichong 解题时间:2014-10-18 10:19:33 解 ...

  5. NYOJ 821 简单求值【简单题】

    /* 解题人:lingnichong 解题时间:2014.10.18   00:46 解题体会:简单题 */ 简单求值 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描写叙述 ...

  6. 大话JS面向对象之扩展篇 面向对象与面向过程之间的博弈论(OO Vs 过程)------(一个简单的实例引发的沉思)

    一,总体概要 1,笔者浅谈 我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭(面向对象式编程因为引入了类.对象.实例等概念,非常贴合人类对于世间万物的认 ...

  7. (hdu 简单题 128道)平方和与立方和(求一个区间的立方和和平方和)

    题目: 平方和与立方和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  8. NYOJ 330 一个简单的数学

    一个简单的数学题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 zyc近期迷上了数学,一天,dj想出了一道数学题来难住他.算出1/n,但zyc一时答不上来希望大家能 ...

  9. 一个简单的特效引发的大战之移动开发中我为什么放弃jquery mobile

    我本想安静的做一个美男子,可是,老板不涨工资,反而,一月不如一月. 我为什么放弃jquery mobile插件选择自己写特效? 在开发中大家都知道效率很重要,一个好的工具可以在开发中大大提升效率,工作 ...

随机推荐

  1. java ArrayList源码分析(转载)

    1.ArrayList是一个相对来说比较简单的数据结构,最重要的一点就是它的自动扩容,可以认为就是我们常说的“动态数组”. 来看一段简单的代码: 12345 ArrayList<String&g ...

  2. [java] 简单的ConcurrentHashMap

    ConcurrentMap和Guava的LocalCache实现原理相近,底层的存储方式使用的时table方式来存储.这里使用最简单且最暴力的方式,在每次访问的时候均加锁. ConcurrentHas ...

  3. cas如何去掉HTTPS认证?

    说明:默认情况下HTTP也是可以访问CAS SERVER的,但认证,登陆,退出等操作均没有任何的效果.所以必须作出下面的修改  1.进入WEB-INF\spring-configuration目录 打 ...

  4. C/C++中的格式化字符

    格式化输出函数包括printf, fprintf, sprintf等等. 格式化输入函数包括scanf, fscanf, sscanf等等. 这类函数在输入输出的时候都有一个参数为格式化字符串(for ...

  5. 【好】strong-password-checker,我自己做出来的:)

    我自己做出来的,分了几种情况来考虑.(再后面有加了注释的版本) https://leetcode.com/problems/strong-password-checker/ // 加油! public ...

  6. Weblogic常见故障之二:XAER_NOTA XAException问题的解决

    在weblogic执行XA操作的时候,我们会碰到如下的错误,后来发现是JDBC配置的问题.主要报错:java.sql.SQLException: XA error: XAER_NOTA : The X ...

  7. C# 中的单精度与双精度区别

    单精度浮点数(float)与双精度浮点数(double)的区别: (1)在内存中占有的字节数不同 * 单精度浮点数在机内占4个字节 *双精度浮点数在机内占8个字节 (2)有效数字位数不同 *单精度浮点 ...

  8. transparent shadow caster unity

    https://forum.unity.com/threads/semitransparent-shadows.276490/ semitransparent shadows dither 类似alp ...

  9. 【架构】Twitter高性能RPC框架Finagle介绍

    Twitter的RPC框架Finagle简介 Finagle是Twitter基于Netty开发的支持容错的.协议无关的RPC框架,该框架支撑了Twitter的核心服务.来自Twitter的软件工程师J ...

  10. ubuntu 的runlevel设定

    修改ubuntu的启动级别 runlevel ----------------------------------------------------------------------------- ...