网站建立与推广营销策划方案怎么写
目录
题目简述:
思路分析:
https://www.acwing.com/problem/content/4892/
题目简述:
给N头牛和M个空调,以及每头牛所占据的区域和每个空调所作用的区域,娇贵的牛对温度有要求,所以农夫需要用空调对牛棚进行降温,但是资本家农夫想以尽可能低的成本来实现牛的需求,所以请你来帮忙;
思路分析:
这个数据范围很特殊,看一眼就知道八九不离十是dfs,然后在仔细细想,确实可以用dfs实现;
回想一下之前做过的dfs模型,这个类似于指数级枚举,指数级枚举是判断当前数选或者不选,然后这个题是判断当前空调选或者不选,然后寻找符合条件的花费最少的一种方案,需要注意的是本题中的空调信息比较多,所以用结构体来存;
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=25;
int mp[110];
//将每一个牛的需求存在一个数组里,最后看数组最终情况,如果<=零那么就符合条件,更新成本的值;
int n,m,res=1e8,cnt;
struct kt
{int l,r,p,w;
}kk[15];
bool st[15];
//标记当前空调选没选过
void dfs(int x)
{
//判断是否满足条件if(x>m){for(int i=1;i<=100;i++){if(mp[i]>=1)return ;}res=min(res,cnt);return ;}if(st[x])return ;
//更改cnt+=kk[x].w;for(int i=kk[x].l;i<=kk[x].r;i++){mp[i]-=kk[x].p;}st[x]=1;dfs(x+1);
//复原st[x]=0;for(int i=kk[x].l;i<=kk[x].r;i++){mp[i]+=kk[x].p;}cnt-=kk[x].w;dfs(x+1);
}
signed main()
{cin >> n >> m ;for(int i=1;i<=n;i++){int l,r,c;cin >> l >> r >> c;for(int j=l;j<=r;j++){mp[j]=c;}}for(int i=1;i<=m;i++){cin >> kk[i].l>>kk[i].r>>kk[i].p>>kk[i].w;}dfs(1);cout << res<<endl;
}
下面是指数级枚举的板题:
https://www.acwing.com/problem/content/94/