2022.1.13

上午看啊哈算法的搜索,之前没懂的广搜 迷宫最短路径。

下午将昨天的八皇后问题解决了,然后洛谷刷了两题

晚上看了单词方阵(无果)

题目描述

一个如下的 6 \times 66×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。

上面的布局可以用序列 2\ 4\ 6\ 1\ 3\ 52 4 6 1 3 5 来描述,第 ii 个数字表示在第 ii 行的相应位置有一个棋子,如下:

行号 1\ 2\ 3\ 4\ 5\ 61 2 3 4 5 6

列号 2\ 4\ 6\ 1\ 3\ 52 4 6 1 3 5

这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。
并把它们以上面的序列方法输出,解按字典顺序排列。
请输出前 33 个解。最后一行是解的总个数。

输入格式

一行一个正整数 nn,表示棋盘是 n \times nn×n 大小的。

输出格式

前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。

输入输出样例

输入 #1复制

6

输出 #1复制

2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4

说明/提示

【数据范围】
对于 100\%100% 的数据,6 \le n \le 136≤n≤13。

题目翻译来自NOCOW。

USACO Training Section 1.5 

 B站看视频讲解。从第一行开始,如果此地没被占领或攻击的到,就拿一个棋子占领此地,标记此地和能攻击到的地方,继续搜下一行,从第一列开始再判断,当最后一行某一列被找到时就输出。如果此行不行重新搜索记得回溯。

#include<stdio.h>
int n,x,s=0;
int p[50];//放置
int lie[50]={0};//这一列未占领
int h1[50]={0};//上斜对角线未被占领
int h2[50]={0};//下斜对角线未被占领

void dfs(int x)//行
{
    for(int i=0;i<n;i++){//列
        if(lie[i]==0&&h1[x-i+7]==0&&h2[x+i]==0){//都未被占领
            p[x]=i;
            lie[i]=1;
            h1[x-i+7]=1;
            h2[x+i]=1;//都标记已被占领

        if(x<n-1) dfs(x+1);//找下一行
        if(x==n-1){
            s++;//总数
            if(s<4){//输出前三个
            for(int j=0;j<n;j++)
                printf("%d ",p[j]+1);
            printf("\n");
            }
        }
        lie[i]=0;
        h1[x-i+7]=0;
        h2[x+i]=0;//回溯
        }
    }
}

int main()
{
    scanf("%d",&n);
    dfs(0);//从第一行开始
    printf("%d\n",s);
}

 

题目描述

Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Farmer John would like to figure out how many ponds have formed in his field. A pond is a connected set of squares with water in them, where a square is considered adjacent to all eight of its neighbors. Given a diagram of Farmer John's field, determine how many ponds he has.

由于近期的降雨,雨水汇集在农民约翰的田地不同的地方。我们用一个NxM(1<=N<=100;1<=M<=100)网格图表示。每个网格中有水('W') 或是旱地('.')。一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑。约翰想弄清楚他的田地已经形成了多少水坑。给出约翰田地的示意图,确定当中有多少水坑。

输入格式

Line 1: Two space-separated integers: N and M * Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.

第1行:两个空格隔开的整数:N 和 M 第2行到第N+1行:每行M个字符,每个字符是'W'或'.',它们表示网格图中的一排。字符之间没有空格。

输出格式

Line 1: The number of ponds in Farmer John's field.

一行:水坑的数量

输入输出样例

输入 #1复制

10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

输出 #1复制

3

说明/提示

OUTPUT DETAILS: There are three ponds: one in the upper left, one in the lower left, and one along the right side.

这题还是连通块的问题,只是多了四个方向, 周围的八个格子都要试一下。遍历每个格子,如果是W,就将与其连在一起的都赋 ' . ' ,这就是一块。

#include<stdio.h>
int N,M,sum=0;
char map[100][100];
int nx,ny;
int m[8][2]={1,0,-1,0,0,1,0,-1,1,1,-1,-1,1,-1,-1,1};

void dfs(int x,int y,int sum)
{
    map[x][y]='.';
    for(int i=0;i<8;i++){
        nx=x+m[i][0];
        ny=y+m[i][1];
        if(nx<0||ny<0||nx>=N||ny>=M||map[nx][ny]=='.')
            continue;
        dfs(nx,ny,sum);
    }
}

int main()
{
    scanf("%d%d",&N,&M);
    getchar();
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++)
            scanf("%c",&map[i][j]);
        getchar();
    }
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++)
            if(map[i][j]=='W')
            dfs(i,j,sum++);
    }
    printf("%d\n",sum);
}

 

题目描述

Perket 是一种流行的美食。为了做好 Perket,厨师必须谨慎选择食材,以在保持传统风味的同时尽可能获得最全面的味道。你有 nn 种可支配的配料。对于每一种配料,我们知道它们各自的酸度 ss 和苦度 bb。当我们添加配料时,总的酸度为每一种配料的酸度总乘积;总的苦度为每一种配料的苦度的总和。

众所周知,美食应该做到口感适中,所以我们希望选取配料,以使得酸度和苦度的绝对差最小。

另外,我们必须添加至少一种配料,因为没有任何食物以水为配料的。

输入格式

第一行一个整数 nn,表示可供选用的食材种类数。

接下来 nn 行,每行 22 个整数 s_isi​ 和 b_ibi​,表示第 ii 种食材的酸度和苦度。

输出格式

一行一个整数,表示可能的总酸度和总苦度的最小绝对差。

输入输出样例

输入 #1复制

1
3 10

输出 #1复制

7

输入 #2复制

2
3 8
5 8

输出 #2复制

1

输入 #3复制

4
1 7
2 6
3 8
4 9

输出 #3复制

1

说明/提示

数据规模与约定

对于 100\%100% 的数据,有 1 \leq n \leq 101≤n≤10,且将所有可用食材全部使用产生的总酸度和总苦度小于 1 \times 10^91×109,酸度和苦度不同时为 11 和 00。

说明

将每一种情况都取到,相互比较得最小值。

#include<stdio.h>
#include<math.h>
int n;
int s=1,b=0;
int s1[20],b1[20];
int sour[20]={0};//是否取过
int sum=9999999;

void dfs(int t)
{
    for(int i=0;i<n;i++){
        if(sour[i]==0){
            s*=s1[i];
            b+=b1[i];
            if(sum>abs(s-b))
                sum=abs(s-b);//两两相比
            sour[i]=1;
            dfs(i+1);
            s/=s1[i];
            b-=b1[i];
            sour[i]=0;//回溯
        }
    }
}

int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d%d",&s1[i],&b1[i]);
    dfs(0);//从第一个开始
    printf("%d\n",sum);
}

明天还是搜索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 首先,打开Eclipse IDE,选择“File”菜单,然后选择“New”和“Dynamic Web Project”。 2. 在“New Dynamic Web Project”对话框中,输入项目名称和目标运行时环境(例如Tomcat),然后单击“Next”。 3. 在“New Dynamic Web Project”对话框的“Configuration”选项卡中,选择“Generate web.xml deployment descriptor”选项,然后单击“Finish”。 4. 在Eclipse IDE中,右键单击项目名称,选择“New”和“Servlet”。 5. 在“New Servlet”对话框中,输入Servlet名称和包名称,然后单击“Next”。 6. 在“New Servlet”对话框的“Configuration”选项卡中,选择“Generate comments”选项,然后单击“Finish”。 7. 在Eclipse IDE中,右键单击项目名称,选择“New”和“JSP”。 8. 在“New JSP File”对话框中,输入JSP文件名称和包名称,然后单击“Finish”。 9. 在Eclipse IDE中,右键单击项目名称,选择“Properties”和“Java Build Path”。 10. 在“Java Build Path”对话框中,选择“Libraries”选项卡,然后单击“Add Library”。 11. 在“Add Library”对话框中,选择“Server Runtime”选项,然后单击“Next”。 12. 在“Add Library”对话框中,选择目标运行时环境(例如Tomcat),然后单击“Finish”。 13. 在Eclipse IDE中,右键单击项目名称,选择“Run As”和“Run on Server”。 14. 在“Run on Server”对话框中,选择目标运行时环境(例如Tomcat),然后单击“Finish”。 15. 在浏览器中输入http://localhost:808/项目名称/,即可访问Java Web项目。 ### 回答2: 2022年1月创建Java Web项目时,我们需要首先了解Java Web开发的基本架构和技术栈。 首先,我们需要选择一个Web框架,如Spring MVC、Struts2等。其中,Spring MVC较为流行,它能够帮助我们快速搭建Java Web应用程序,并提供了一整套的解决方案,包括依赖注入、AOP等。 其次,我们需要选择一个MVC模式的数据库访问框架,如MyBatis、Hibernate等。MyBatis是一个轻量级、易于使用的ORM框架,它能够灵活地映射Java对象到SQL语句,实现对象化的数据库访问。Hibernate也是一个常用的ORM框架,它能够让我们使用面向对象的方式访问数据库,提高了代码的可读性和可维护性。 此外,我们需要选择一个Java Web服务器,如Tomcat、Jetty等。Tomcat是Apache软件基金会开发的Java Web应用服务器,它支持Servlet、JSP等Java Web标准,并提供了一些常用的扩展。 最后,我们需要选择一个开发工具,如Eclipse、IntelliJ IDEA等。Eclipse是一个功能齐全的开发工具,支持Java、Web、数据库等领域。IntelliJ IDEA是一款功能强大的Java开发工具,支持众多框架和技术。 在创建Java Web项目时,我们需要遵循MVC模式,将业务逻辑、数据访问、用户界面分别封装在不同的组件中,实现代码的高内聚、低耦合。同时,我们需要注意安全性、性能等方面的问题,确保项目的稳定、可靠、高效。 总之,Java Web开发需要综合运用多种技术和工具,也需要不断学习和探索。希望我的回答对你有所帮助。 ### 回答3: JAVA WEB项目能够快速搭建、高效性能、稳定性强、跨平台支持丰富,深受广大开发者青睐。然而,在创建JAVA WEB项目的时候,需要涉及多个环节,需要谨慎处理。以下是创建一个JAVA WEB项目的步骤: 1、选择开发工具:Eclipse、IntelliJ IDEA是非常不错的JAVA WEB开发工具,如果您在学习JAVA WEB开发,开发经验不足,建议使用Eclipse,其用户体验是相对更好的;若您是有一定经验的JAVA WEB开发工程师,建议使用IntelliJ IDEA,它有强大的代码补齐和代码自动排版等优秀特性。 2、创建一个新的Web项目:打开Eclipse或IntelliJ IDEA,点击“新建”按钮,创建一个新的JAVA WEB项目,在这里可以填写项目名称、项目路径、JDK等信息,此处需要妥善设置。 3、导入所需的JAR包:完成第二步后,在项目中可能需要导入一些外部的依赖,如JSTL基础标签库、Servlet API等jar包,可以通过Maven管理依赖,避免手动下载与配置。 4、配置Web.xml文件:Web.xml文件是JAVA WEB项目的核心配置文件,可以在其中添加Servlet、Filter、Listener等来处理请求和响应。需要注意的是,Web.xml文件中对应的servlet、filter、url-pattern等节点都要正确配对,否则会导致项目运行出错。 5、编写页面和代码:在完成上述的环节后,开始编写前端页面和后端代码,思考如何完成所需的业务功能,接收前端请求,处理后端逻辑,输出结果。 6、部署到WEB服务:部署的方式有多种,如Tomcat、Jetty等,也可以在IDEA中直接点击运行,将项目部署到内置的WEB服务器中。具体的部署方式因开发者的使用环境和个人喜好而异,各种方式均可。 在创建JAVA WEB项目时,以上几个步骤可以让我们更加轻松地完成项目搭建,并在代码编写的过程中完成优化和调试等环节。需要注意的是,不仅需要关注JAVA WEB项目中的技术,也需要考虑到开发周期、开发质量、以及代码规范和用户体验等方面,让项目更加完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值