zb的生日(搜索)
来源:互联网 发布:把字符串放到数组中 编辑:程序博客网 时间:2024/05/02 01:12
这样搜索不错:
#include<stdio.h>#include<math.h>int a[10000];int dd;//用dd来保存最小差 void fun(int sum,int cur,int m,int i) { if (i<m)//最多选m个 { //假设cur为其中一个的分得的和,如,sum=67,cur=35,t1=-3; int t1=sum-2*cur; if (t1<0) t1=-t1; if (t1<dd) //记下最小的t1; dd=t1; fun(sum,cur+a[i+1],m,i+1);//选a[i+1] fun(sum,cur,m,i+1);//不选a[i+1]; }}int main(){ int m; int i,j,sum=0; while (scanf("%d",&m)!=EOF) { sum=0; for (i=0;i<m;i++) { scanf("%d",&a[i]); sum=sum+a[i]; } dd=sum; fun(sum,a[0],m,0);printf("%d\n",dd); } return 0;}
超短时间:
#include <stdio.h>#define max(a,b) a>b?a:bint V,ans,n,w[21],sum[21];void dfs(int i,int cnt){ if(i == 0) { ans = max(ans,cnt); return ; } if(ans == V || cnt+sum[i] <= ans) //cut return ; if(cnt+w[i] <= V) dfs(i-1,cnt+w[i]); dfs(i-1,cnt);}int main(){ while(~scanf("%d",&n)) { ans = 0; for(int i=1;i<=n;i++) { scanf("%d",&w[i]); sum[i] = sum[i-1] + w[i]; } V = sum[n]/2; dfs(n,0); printf("%d\n",sum[n]-2*ans); } return 0;}
搜索前一定要想好搜索角度……
- zb的生日(搜索)
- nyoj325 zb的生日(搜索)
- zb的生日(01类搜索)
- nyoj325 zb的生日 (深度搜索)(动态规划)
- NYOJ 325 zb的生日(搜索解平分问题)
- Zb的生日 nyoj325(搜索、平均问题)
- nyoj325 zb的生日(背包或搜索)
- NYOJ 325 zb的生日(组合数搜索)
- 南阳理工 325 zb的生日(动态规划+搜索)
- NYOJ-325-zb的生日(典型搜索)
- zb的生日(dfs)
- zb的生日 (01背包)
- zb的生日(NYOJ 325)
- nyoj zb的生日 (DFS)
- nyoj325 zb的生日(DFS)
- zb的生日 325 (dfs)
- NYOJ 325 zb的生日 (DFS)
- nyoj zb的生日(DFS)
- 关于MFC中成员函数引用CDC的问题
- Java多线程编程--(6)学习Java5.0 并发编程包--原子操作的一些类型
- Javascript定义类(class)的三种方法
- HDU2825
- 如何解决"应用程序无法启动,因为应用程序的并行配置不正确"问题
- zb的生日(搜索)
- perl 读写xml举例
- 7.26
- js学习第一天-----基本类型数组及常见的内置函数
- Linux入门:截图工具(Scrot)
- 关于USB2.0和USB高速传输模式的一点说明
- 对非公开的UIButton和UIBarButtonItem风格的使用
- .9图片的制作(Draw 9-patch)
- C++标准转换运算符const_cast