此次练习的地址:  http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26732#overview

密码 acmore

Problem A(POJ1753)

题目: Flip Game

直接拿二进制模拟暴力枚举

之前已经做过了的Flip Game(枚举)

这次又WA了两次才AC,细心细心再细心!!!代码

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <math.h>
#include <iostream>
#include <stack>
#include <set>
#include <queue>
#define MAX(a,b) (a) > (b)? (a):(b)
#define MIN(a,b) (a) < (b)? (a):(b)
#define mem(a) memset(a,0,sizeof(a))
#define INF 1000000007
#define MAXN 20005
using namespace std; int ma;
int m;
int ok;
int meiju(int st)
{
int i;
for(i=;i<;i++)
{
if((<<i) & st)
{
m ^= (<<i);
if(i>=)
{
m ^= (<<(i-));
}
if(i%>)
{
m ^= (<<(i-));
}
if(i%<)
{
m ^= (<<(i+));
}
if(i+<)
{
m ^= (<<(i+));
}
}
}
if(m == || m == (<<)-)return ;
return ;
} int main()
{
ok =;
ma =;
int i,j;
char str[];
for(i=;i<;i++)
{
scanf("%s",str);
for(j=;j<;j++)
{
if(str[j] == 'b')
ma ^= (<<(i*+j));
}
}
int min =INF;
for(i=;i<(<<);i++)
{
m = ma;
if(meiju(i))
{
int ans =;
for(j=;j<;j++)
{
if((<<j) & i)ans ++;
}
ok=;
min=MIN(min,ans);
}
}
if(ok)printf("%d\n",min);
else printf("Impossible\n");
return ;
}

Problem B(POJ2965)

题目:The Pilots Brothers' refrigerator

与上题一样,同样两次没过==!

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <math.h>
#include <iostream>
#include <stack>
#include <set>
#include <queue>
#define MAX(a,b) (a) > (b)? (a):(b)
#define MIN(a,b) (a) < (b)? (a):(b)
#define mem(a) memset(a,0,sizeof(a))
#define INF 1000000007
#define MAXN 20005
using namespace std; int ma;
int m;
int meiju(int st)
{
int i;
for(i=;i<;i++)
{
if((<<i) & st)
{
int j,k=;
k|=(<<i);
for(j=;j<;j++){
k|=<<(i-i%+j);
k|=<<(j*+i%);
}
m^=k;
}
}
if(m == )return ;
return ;
} int main()
{
ma =;
int i,j;
char str[];
for(i=;i<;i++)
{
scanf("%s",str);
for(j=;j<;j++)
{
if(str[j] == '+')
ma ^= (<<(i*+j));
}
}
int min =INF;
int key;
for(i=;i<(<<);i++)
{
m = ma;
if(meiju(i))
{
int ans =;
for(j=;j<;j++)
{
if((<<j) & i)ans ++;
}
if(min > ans)
{
min = ans;
key = i;
}
}
}
printf("%d\n",min);
for(i = ;i<;i++)
{
if((<<i) & key)
{
printf("%d %d\n",i/+, i%+);
}
}
return ;
}

problem C ZOJ 1716

我的方法是直接用一个数组  sum[i][j]存入从左上角为0,0,右下角为(i,j)的矩形的树的个数。

这样的话边长为a, b的矩形内部的树的个数就是

sum[i][j]-sum[i-a][j]-sum[i][j-b]+sum[i-a][j-b];

枚举小矩形的起点就行

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <math.h>
#include <iostream>
#include <stack>
#include <set>
#include <queue>
#define MAX(a,b) (a) > (b)? (a):(b)
#define MIN(a,b) (a) < (b)? (a):(b)
#define mem(a) memset(a,0,sizeof(a))
#define INF 1000000007
#define MAXN 20005
using namespace std; int map[][];
int sum[][];
int n,width,height; int shuru()
{
mem(map);
mem(sum);
while(scanf("%d",&n)!=EOF && n)
{
int j,i,a,b;
for(i=;i<=n;i++)
{
scanf("%d%d",&a,&b);
map[b][a] = ;
}
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
sum[i][j] = map[i][j]+sum[i-][j]+sum[i][j-]-sum[i-][j-];
}
}
scanf("%d%d", &width, &height);
return ;
}
return ;
} int f()
{
int i,j;
int max = ;
for(i=height;i<=;i++)
{
for(j=width;j<=;j++)
{
max = MAX(sum[i][j]-sum[i][j-width]-sum[i-height][j]+sum[i-height][j-width], max);
}
}
return max;
} int main()
{
while(shuru())
{
printf("%d\n",f());
}
return ;
}

problem D ZOJ 3356

坑爹的题目啊,之前做一直wa,后来实在是没办法,就参见了大神的代码,发现原来自己完全理解错了题目意思了。题目大意是说要让他不能亏,但是每次都是最坏的情况,也就是说每次投注之后,中的都是最少的哪一个。

最后还是参见了大神的思路,按投注的硬币的个数枚举,但每次放一个硬币时都是放在目前能都得到的最少的那一堆。所以复杂度就是O(coins)

代码:

 #include <stdio.h>
#include <math.h>
#define MAX(a,b) (a)>(b)?(a):(b)
int main()
{
double x,y,z;
int coins;
int T;
while(~scanf("%d",&T))while(T--)
{
int get[]={},put[]={},mul[];
scanf("%d%lf%lf%lf", &coins, &x, &y, &z);
mul[] = (int)floor(x* + 0.5);
mul[] = (int)floor(y* + 0.5);
mul[] = (int)floor(z* + 0.5);
int i,index = ;
int ans = coins;
for(i=;i<=coins;i++)
{
put[index] ++ ;
get[index] = put[index] * mul[index]/;
index = get[] < get[] ? : ;//找到能够得到的最少的那一堆
index = get[index] < get[] ? index : ;
ans = MAX(ans, get[index]+coins-i);
}
printf("%d\n", ans);
}
return ;
}

problem E URAL 1010

WA了

problem F HDU 2069

起初觉得可以拿母函数做但是却发现,有个坑爹的条件就是Your program should be able to handle up to 100 coins.这句话,银币数目不可以超过100个

于是我换了一个想法,用记忆化的搜索,d[i][j][k]表示要凑齐i数值,开始用第j种硬币,还可以用k个硬币,为了不超时,记忆化一下。结果居然0Ms过了,真是奇迹~~~~

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <math.h>
#include <iostream>
#include <stack>
#include <set>
#include <queue>
#define MAX(a,b) (a) > (b)? (a):(b)
#define MIN(a,b) (a) < (b)? (a):(b)
#define mem(a) memset(a,0,sizeof(a))
#define INF 1000000007
#define MAXN 20005
using namespace std; int f[][][],vis[][][];
int val[]={,,,,,}; int dfs(int v,int c,int rest)
{
if(vis[v][c][rest])return f[v][c][rest];
vis[v][c][rest] = ;
if(c == && rest >= && v<=rest)return f[v][c][rest]=;
else if(c == && (rest < || v > rest))return ;
int i,m = v/val[c];
f[v][c][rest] = ;
for(i=;i<=m;i++)
{
f[v][c][rest]+=dfs(v-val[c]*i, c-, rest-i);
}
return f[v][c][rest];
} int main()
{
mem(f);
mem(vis);
int n;
while(~scanf("%d",&n))
{
int k;
if(n == ){printf("1\n");continue;}
if(n<)k=;
else if(n<)k=;
else if(n<)k=;
else if(n<)k=;
else k =;
printf("%d\n",dfs(n,k,));
}
return ;
}

contest7.20(暴力专练)的更多相关文章

  1. 10-19 dp专练

    dp专练,终于克服了一次自己对dp的恐惧,磕出来一道题. 得分情况: T1:0 T2:0 T3:0 emmmm,磕出来的题是T2,但是因为初始化和int long long的原因爆零了 T1:n只狼排 ...

  2. P1251 递推专练3

    递推专练3 描述 Description 圆周上有N个点.连接任意多条(可能是0条)不相交的弦(共用端点也算相交)共有多少种方案? 输入格式 Input Format 读入一个数N.<=N< ...

  3. 整理了适合新手的20个Python练手小程序

    100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. 本文附带基础视频教程:私信回复[基础]就可以获取的 [程序1] ...

  4. 8.1搜索专练DFS和BFS

    这是第一次全部做出来的依次练习了,有一些都是做过两遍了的,但是还是错了几回,更多时候我还是应该多注意下细节,就好像章爷笑我 的一样,像什么vis[]标记没清0,什么格式错误,还有什么题目没看清,还是的 ...

  5. 20个Java练手项目,献给嗜学如狂的人

    给大家推荐一条由浅入深的JAVA学习路径,首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE 和 SSH 框架学习.最后再通过有趣的练手项目进行巩固. JAVA基础 ...

  6. 2016.4.9 NOI codevs动态规划专练

    1.NOI 最大子矩阵 1:最大子矩阵 总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 ...

  7. 2016.4.3 动态规划NOI专练 王老师讲课整理

    1.6049:买书 总时间限制:  1000ms 内存限制:  65536kB 描述 小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元. 问小明有多少种买书方案?(每种书可购买 ...

  8. 9.23 NOIP模拟题(数学专练)

    数论基础 专题测试  命题人:清华大学 王赢绪 /* 水题 答案为C(n-k,m-1) 预处理阶乘和逆元,O(1)算答案 开始读错题了!!!朱一乐!!! */ #include<iostream ...

  9. $vjudge\ CSP-S$专题专练题解

    照例先放个链接$QwQ$ $A$ $QwQ$之前写过题解辣. 重新说下趴,就给横坐标纵坐标也开点,然后每个点连向对应横纵坐标边权为$0$,相邻横坐标点之间连边,相邻纵坐标点之间连边,跑个最短路就完事$ ...

随机推荐

  1. disable-linux-firewall-under-centos-rhel-fedora

    http://www.cyberciti.biz/faq/disable-linux-firewall-under-centos-rhel-fedora/

  2. easyui-dialog中文件上传处理

    function openDialog() { // $('#dlg').dialog('open'); //EasyUi的dialog中文件上传,后台获取不到文件,需要改写为下面这样 $(" ...

  3. LA 2218 (半平面交) Triathlon

    题意: 有n个选手,铁人三项有连续的三段,对于每段场地选手i分别以vi, ui 和 wi匀速通过. 对于每个选手,问能否通过调整每种赛道的长度使得他成为冠军(不能并列). 分析: 粗一看,这不像一道计 ...

  4. BZOJ1272: [BeiJingWc2008]Gate Of Babylon

    题解: 多重集合的组合数?还是0-m?有些元素有个数限制? 多重集合的组合数可以插板法,0-m直接利用组合数的公式一遍求出来,个数限制注意到只有15个,那我们就暴力容斥了 AC了真舒畅.. 注意开lo ...

  5. hdu 4604 Deque(最长不下降子序列)

    从后向前对已搜点做两遍LIS(最长不下降子序列),分别求出已搜点的最长递增.递减子序列长度.这样一直搜到第一个点,就得到了整个序列的最长递增.递减子序列的长度,即最长递减子序列在前,最长递增子序列在后 ...

  6. hdu 4609 3-idiots(快速傅里叶FFT)

    比较裸的FFT(快速傅里叶变换),也是为了这道题而去学的,厚的白书上有简单提到,不过还是推荐看算法导论,讲的很详细. 代码的话是照着别人敲的,推荐:http://www.cnblogs.com/kua ...

  7. I.MX6 默认打开 USB adb

    /***************************************************************************** * I.MX6 默认打开 USB adb ...

  8. 基于RTP的H264视频数据打包解包类

    from:http://blog.csdn.net/dengzikun/article/details/5807694 最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打 ...

  9. 《C++ Primer 4th》读书笔记 第12章-类

    原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3936473.html

  10. 学习Mongodb(一)

    图片摘录自陈彦铭出品2012.5的<10天掌握MongDB> MongoDB的特点--->面向集合存储,易于存储对象类型的数据--->模式自由--->支持动态查询---& ...