20140708总结

今天的题还是比较水的。。涨自信?

第一题。。显而易见的dp:dp[i][j][k][l][m]:表示i位,j个1,k是否顶上界,l个前导零,是否仍在前导零上。转移方程比较复杂,详见代码。

第二题比较复杂,大意就是把[ai,bi] 作为区间,落在[1,N]上,互不重叠,长度互不相等。然后dp[j][k]表示在i位,选了k个,其和为j。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 long long dp[50][50][2][50][2];
 6 long long work(long long x)
 7 {
 8     long long top[200];
 9     memset(dp,0,sizeof(dp));
10     memset(top,0,sizeof(top));
11     long long i=1;
12     long long j=1;
13     if(x==0) return 0;
14     while(x/j)
15     {
16         i++;
17         j*=2;
18     }
19     if(i)
20         i--;
21     long long n=i;
22     while(x)
23     {
24         top[i]=x%2;
25         x/=2;
26         i--;
27     }
28 //    for(int i=1;i<=n;i++)
29 //        cout<<top[i];
30 //    cout<<endl<<endl;
31     dp[1][0][1][0][0]=1;
32 //    for(int i=1;i<=n;i++)
33 //        cout<<top[i];
34 //    cout<<endl;
35     for(i=1;i<=n;i++)
36         for(j=0;j<=n/2;j++)
37             for(int k=0;k<=n;k++)
38             {
39                 dp[i+1][j][0][k+1][0]+=dp[i][j][0][k][0];
40                 dp[i+1][j+1][0][k][1]+=dp[i][j][0][k][0];
41                 if(top[i]==0)
42                     dp[i+1][j][1][k+1][0]+=dp[i][j][1][k][0];
43                 else
44                 {
45                     dp[i+1][j][0][k+1][0]+=dp[i][j][1][k][0];
46                     dp[i+1][j+1][1][k][1]+=dp[i][j][1][k][0];
47                 }
48                 for(long long l=0;l<=1;l++)
49                     dp[i+1][j+l][0][k][1]+=dp[i][j][0][k][1];
50                 for(long long l=0;l<=top[i];l++)
51                     dp[i+1][j+l][l==top[i]][k][1]+=dp[i][j][1][k][1];
52 //                cout<<dp[i][j][up]<<endl;
53             }
54     long long ans=0;
55     for(int k=0;k<=n;k++)
56         for(int i=1;i<=(n-k)/2;i++)
57         {
58             ans+=dp[n+1][i][0][k][1]+dp[n+1][i][1][k][1];
59         }
60
61 //    for(int j=1;j<=n+1;j++)
62 //    for(int k=0;k<=n;k++)
63 //    for(int i=1;i<=n;i++)
64 //        cout<<dp[j][i][0][k][1];
65     return ans;
66 }
67 void work()
68 {
69     freopen("testA.in","r",stdin);
70     freopen("testA.out","w",stdout);
71     long long L,R;
72     cin>>L>>R;
73     if(L==1)
74         cout<<work(R)<<endl;
75     else
76         cout<<work(R)-work(L-1)<<endl;
77 //    cout<<work(R)<<"  "<<work(L-1)<<endl;
78 }
79 int main()
80 {
81     work();
82     return 0;
83 }

然后答案就是,详见标程代码(我还没有写出来)。

 1 #include <map>
 2 #include <set>
 3 #include <queue>
 4 #include <stack>
 5 #include <cctype>
 6 #include <cstdio>
 7 #include <string>
 8 #include <vector>
 9 #include <cstring>
10 #include <iostream>
11 #include <algorithm>
12 using namespace std;
13
14 typedef long long LL;
15 typedef pair<int, int> PII;
16
17 const int N = 1005;
18 const int mod = 1000000007;
19 int f[N][N];
20 int c[N][N];
21 LL fact[N];
22
23 inline void add(int &x, int y) {
24     x += y;
25     if (x >= mod)
26         x %= mod;
27 }
28
29 int main() {
30
31     freopen("testB.in","r",stdin);
32     freopen("testB.out","w",stdout);
33     f[0][0] = f[0][1] = 1;
34     for (int d = 1; d < N - 1; d++)
35         for (int i = N - 1; i >= d; i--)
36             for (int j = min(d + 1, 50); j > 0; j--)
37                 add(f[i][j], f[i - d][j - 1]);
38
39     for (int i = 0; i < N; i++) {
40         c[i][0] = c[i][i] = 1;
41         for (int j = 1; j < i; j++) {
42             c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
43             if (c[i][j] >= mod)
44                 c[i][j] -= mod;
45         }
46     }
47     fact[0] = 1;
48     for (int i = 1; i < N; i++)
49         fact[i] = fact[i - 1] * i % mod;
50
51     int T;
52     scanf("%d", &T);
53     while (T--) {
54         int n, k;
55         scanf("%d%d", &n, &k);
56         if (n < k)
57             puts("0");
58         else {
59             LL ans = 0;
60             for (int x = 0; x <= n - k; x++) {
61                 LL s = (LL)c[n - x][k] * f[x][k] % mod;
62                 ans += s;
63                 if (ans >= mod)
64                     ans -= mod;
65             }
66             printf("%I64d\n", ans * fact[k] % mod);
67         }
68     }
69     return 0;
70 }

第三题比较水,我就不多说什么了,多特判就好了。。

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int main()
 5 {
 6     freopen("testC.in","r",stdin);
 7     freopen("testC.out","w",stdout);
 8     int n,m,x;
 9     cin>>n>>m>>x;
10     if(x<0)
11     {
12         cout<<0<<endl;
13         return 0;
14     }
15     if(x==0)
16     {
17         cout<<n*m/2<<endl;
18         return 0;
19     }
20     x-=1;
21     n-=2*x;
22     m-=2*x;
23     if(n<=0||m<=0)
24         cout<<0<<endl;
25     else if(n==1||m==1)
26         cout<<n*m-n*m/2<<endl;
27     else
28         cout<<(n+m)-2<<endl;
29     return 0;
30 }

20140708总结

时间: 2024-10-24 16:30:41

20140708总结的相关文章

(20140708作业)编程的魅力在于:你不真的跳下去,永远不知道这个坑有多深!

作业要求: 输出TypeCode枚举类内所有的值 1 //获取枚举类型的值 2 //var V = Enum.GetValues(typeof(TypeCode)); 3 4 //1.名称 5 Console.ForegroundColor = ConsoleColor.Yellow; //设置颜色 6 Console.WriteLine("输出名称:"); //提示 7 foreach (var name in Enum.GetNames(typeof(TypeCode))) //循

20140708郑州培训第二题Impossible Game

Impossible Game题目描述你发明了一个简单的单人电脑游戏.在开始游戏时,玩家必须输入一个长度为 K 的字符串,且这个字符串的元素只能为‘A’‘B’‘C’或者‘D’.每一种字符串都代表一种颜色,不同的字符串可能有相同的颜色,而一种字符串的颜色是由你在游戏开始前决定的.为了赢得这个游戏,玩家必须经过一系列操作,将起始输入的字符串转换成另一个字符串,且两个字符串所代表的颜色相同但构成不同.游戏规定了 N 种置换规则,每种规则由两个长度相同的字符串 a[i]和 b[i]表示,且 a[i]和

SQL Server 2014 日志传送部署(5):通过T-SQL命令来部署日志传送

13.2.5 通过T-SQL命令来部署日志传送 SQL Server还提供以T-SQL命令方式来部署日志传送.在上一个章节中当完成步骤(6)或者(8)后,可保存生成的命令脚本.这个脚本命令结果和在Management Studio中操作的结果是等价的,此命令脚本也可以使用在用户在灾难恢复方案中更快速的重新部署日志传送. 得到的命令脚本(带监视服务器): -- 在主服务器上执行下列语句,以便为数据库 [SQLSVR1].[DB01] -- 配置日志传送. -- 需要在主服务器上 [msdb] 数据

百度the big talk节目

主要事件 2015-03-09期:硅谷峰会:智能机器人&对话沃兹尼亚克 2015-03-02期:硅谷峰会:创新金融和智能城市 2015-02-15期:硅谷峰会:数字生物学和数字医药 2015-02-11期:硅谷峰会:深度学习和在线教育 2015-02-09期:硅谷行:探索科技创新之都 2015-01-27期:硅谷峰会前瞻 2014-12-21期:生命科学开始走俏 2014-12-15期:计算机的未来&机器人汽车 2014-12-07期:奇点大学公开课指数思维&人工智能 2014-1

乐观锁和悲观锁的区别

一分钟教你知道乐观锁和悲观锁的区别 分类: 数据库(Database)2014-07-08 14:06 17588人阅读 评论(2) 收藏 举报 悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁. 乐观锁(Optimistic Lock), 顾名思义,就是很乐观,

自然语言处理怎么最快入门?

http://www.zhihu.com/question/19895141 stanford NLP课程网址 https://class.coursera.org/nlp/lecture 14 个回答 赞同337反对,不会显示你的姓名 吴俣,自然语言处理民工 杨泽.林斌.王汪汪 等人赞同 推荐<数学之美>,这个书写得特别科普且生动形象,我相信你不会觉得枯燥.这个我极力推荐,我相信科研的真正原因是因为兴趣,而不是因为功利的一些东西. 接下来说,<统计自然语言处理基础>这本书,这书实

C#windows应用程序打包(VS2010+SQLServer2008)

C#windows应用程序打包(VS2010+SQLServer2008) 开发环境:VS2010+SQL Server 2008 操作系统:win7_32bit 旗舰版 开发语言:C# 项目名称:学生寄宿管理系统 下面开始介绍:如何给windows应用程序打包? 第一步: 打开VS2010,打开你要打包的项目,然后右击"解决方案",”添加“,"新建项目",弹出如下图所示界面: 点击”安装和部署“左边的三角形,选择下面的”Visual studio Installe

Nutch2.2.1抓取流程

一.抓取流程概述 1.nutch抓取流程 当使用crawl命令进行抓取任务时,其基本流程步骤如下: (1)InjectorJob 开始第一个迭代 (2)GeneratorJob (3)FetcherJob (4)ParserJob (5)DbUpdaterJob (6)SolrIndexerJob 开始第二个迭代 (2)GeneratorJob (3)FetcherJob (4)ParserJob (5)DbUpdaterJob (6)SolrIndexerJob 开始第三个迭代 -- 2.抓取

集成Nutch/Hbase/Solr构建搜索引擎之二:内容分析

请先参见"集成Nutch/Hbase/Solr构建搜索引擎之一:安装及运行",搭建测试环境 http://blog.csdn.net/jediael_lu/article/details/37329731 一.被索引的域 Schema.xml 在使用solr对Nutch抓取到的网页进行索引时,schema.xml被改变成以下内容. 文件中指定了哪些域被索引.存储等内容. <?xml version="1.0" encoding="UTF-8"