Homework Introduction
#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int book[N][N],cnt;
int n,m,a[N][N],nxt[4][2]={0,1,0,-1,1,0,-1,0};
int b[N*N][2];
void dfs(int x,int y,int H){
book[x][y] = 1;
for(int i=0;i<4;i++){
int nx = x+nxt[i][0];
int ny = y+nxt[i][1];
if(nx>=1 && nx<=n && ny>=1 && ny<=m){
if(book[nx][ny]==0 && abs(a[nx][ny]-a[x][y])<=H){
dfs(nx,ny,H);
}
}
}
}
int check(int x)
{
memset(book,0,sizeof(book));
dfs(b[1][0],b[1][1],x);
for(int i=1;i<=cnt;i++){
if(book[b[i][0]][b[i][1]]==1){
continue;
}
else return 0;
}
return 1;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int x;
cin>>x;
if(x==1){
b[++cnt][0] = i;
b[cnt][1] = j;
}
}
}
int res = 0;
int l=0,r=1e9;
while(l<=r){
int mid = (l+r)>>1;
if(check(mid)){
res = mid;
r = mid-1;
}
else l = mid+1;
}
cout<<res<<endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 705;
int n,m,a[N][N];
struct node{
int x,y,val;
}p[N*N];
int book[N][N];
bool cmp(node a,node b){
return a.val>b.val;
}
int nxt[8][2]={0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1};
void dfs(int x,int y){
book[x][y] = 1;
for(int i=0;i<8;i++){
int nx = x+nxt[i][0];
int ny = y+nxt[i][1];
if(nx>=1 && nx<=n && ny>=1 && ny<=m){
if(book[nx][ny]==0 && a[nx][ny]<=a[x][y]){
dfs(nx,ny);
}
}
}
}
int main()
{
cin>>n>>m;
int cnt = 0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
p[++cnt] = {i,j,a[i][j]};
}
}
sort(p+1,p+cnt+1,cmp);
int res = 0;
for(int i=1;i<=cnt;i++){
if(book[p[i].x][p[i].y]==0){
res++;
dfs(p[i].x,p[i].y);
}
}
cout<<res<<endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 40;
int n,m,Final,res=1e18;
int e[N];//00010101
map<int,int>mp;
void dfs(int x,int limit,int cost,int status){
//cout<<x<<" "<<limit<<" "<<cost<<" "<<status<<endl;
if(limit<=n/2){
//前半部分
if(mp.count(status))
mp[status] = min(mp[status],cost);
else mp[status] = cost;
if(x>limit)return;
dfs(x+1,limit,cost+1,status^e[x]);
dfs(x+1,limit,cost,status);
}
else{
int tmp = Final^status;
if(mp.count(tmp)){
res = min(res,cost+mp[tmp]);
}
if(x>limit){
return;
}
dfs(x+1,limit,cost,status);
dfs(x+1,limit,cost+1,status^e[x]);
}
}
signed main()
{
mp[0] = 0;
cin>>n>>m;
Final = (1LL<<n)-1LL;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
e[x] |= (1LL<<(y-1LL));
e[y] |= (1LL<<(x-1LL));
}
for(int i=1;i<=n;i++){
e[i] |= (1LL<<(i-1LL));
}
dfs(1,n/2,0,0);
dfs(n/2+1,n,0,0);
cout<<res<<endl;
return 0;
}
/*
1.前一半比赛花费的金额[1,1,1,1,3,4,5,6,7,8,9,10,11,12]
2.后一半比赛花费的金额[4,5,6,7,8,9,10,11,11,11,11,11]
*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 45;
int n,m,a[N];
vector<int>p1,p2;
void dfs(int x,int limit,int cost){
if(cost>m)return;
if(limit==n/2){
if(x>limit){
p1.push_back(cost);
return;
}
dfs(x+1,limit,cost+a[x]);
dfs(x+1,limit,cost);
}
else{
if(x>limit){
p2.push_back(cost);
return;
}
dfs(x+1,limit,cost+a[x]);
dfs(x+1,limit,cost);
}
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
dfs(1,n/2,0);
dfs(n/2+1,n,0);
sort(p1.begin(),p1.end());
int res = 0;
for(int i=0;i<p2.size();i++){
int tmp = upper_bound(p1.begin(),p1.end(),m-p2[i])-p1.begin();
res+=tmp;
}
cout<<res<<endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 25;
/*
mp[i]和为i的所有状态
*/
int n,a[N],sum,ans[2000005];
unordered_map<int,vector<int>>mp;
void dfs(int x,int limit,int status,int cost){
if(limit==n/2){
if(x>limit){
mp[cost].push_back(status);
return;
}
}
else{
if(x>limit){
// cout<<cost<<" "<<status<<endl;
for(int i=0;i<mp[cost].size();i++){
int t = mp[cost][i];
//cout<<t<<" "<<status<<endl;
ans[status|t] = 1;
}
return;
}
}
dfs(x+1,limit,status,cost);
dfs(x+1,limit,status|(1<<(x-1)),cost+a[x]);
dfs(x+1,limit,status|(1<<(x-1)),cost-a[x]);
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
dfs(1,n/2,0,0);
dfs(n/2+1,n,0,0);
int res = 0;
for(int i=1;i<=(1<<n)-1;i++){
res+=ans[i];
}
cout<<res<<endl;
return 0;
}
Problem
Please claim the assignment to see the problems.
- Status
- Live...
- Problem
- 35
- Open Since
- 2025-11-3 0:00
- Deadline
- 2026-1-31 23:59
- Extension
- 24 hour(s)