day 19 暴力枚举
创始人
2024-05-16 11:43:34
0

注意:用long long 存答案

P2241 统计方形(数据加强版)

例:2(n) * 3(m):枚举 i 从0~n-1;j从0~m-1

边长为 1 的正方形:2 * 3 个;(n - 0)*(m - 0)

边长为 2 的正方形:1 * 2个;(n - 1)*(m - 1)

其他为 长方形;(n - i)*(m - j)

#include 
using namespace std;long long n, m, suma, sumb; 
int main()
{cin >> n >> m;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(j == i) suma += (n - i)*(m - j);else sumb += (n - i)*(m - j);}}cout << suma << " " << sumb << endl;return 0;
}

P2089 烤鸡

有 10 种配料,每种配料可以放 1 到 3 克,任意烤鸡的美味程度为所有配料质量之和

#include 
using namespace std;int n, a[10010][10], t[10], m;//m 方案数, 第 i种材料 t[i]克 
void dfs(int sum, int k){// k 种配料,美味程度 sum if(k == 10 && sum == n){for(int i = 0; i < 10; i++){a[m][i] = t[i];} m++;}if(k < 10 && sum < n){for(int j = 1; j <= 3; j++){t[k] = j;dfs(sum + j, k + 1);}}
}
int main()
{cin >> n;dfs(0, 0);cout << m << endl;for(int i = 0; i < m; i++){for(int j = 0; j < 10; j++){cout << a[i][j] << " ";}cout << endl;}return 0;
}

P1618 三连击(升级版)

保证 A

#include 
using namespace std;int a, b, c, f, vis[10];
double ta, tb, tc;
void fun(int n){while(n){vis[n % 10]++;n /= 10;}
}
int main()
{cin >> a >> b >> c;for(int i = 123; i <= 987; i++){memset(vis, 0, sizeof(vis));ta = i;tb = ta / a * b;//ta:tb = a:btc = ta / a * c;if(int(tb) != tb || int(tc) != tc || tc > 987)continue;fun(ta), fun(tb), fun(tc);if(vis[1]==1 && vis[2]==1 && vis[3]==1 && vis[4]==1 && vis[4]==1 && vis[6]==1 && vis[7]==1 && vis[8]==1 && vis[9]==1){cout << ta << " " << tb << " " << tc << endl;f = 1;}}if(! f) cout << "No!!!" << endl; return 0;
}

P1157 组合的输出

#include 
using namespace std;int n, r, a[25], ans[25]; 
void dfs(int id, int num){if(num == r){for(int i = 0; i < num; i++)cout << setw(3) << ans[i];cout << endl; }else if(num < r){for(int i = id + 1; i <= n; i++){ans[num] = a[i];dfs(i, num + 1);}}
}
int main() 
{cin >> n >> r;for(int i = 1; i <= n; i++) a[i] = i;dfs(0, 0);return 0;
}

P1706 全排列问题

#include 
using namespace std;int n, a[10], vis[10], ans[10];
void dfs(int num){if(num == n){for(int i = 0; i < num; i++)cout << setw(5) << ans[i];cout << endl;}if(num < n){for(int i = 1; i <= n; i++){if(! vis[i]){ans[num] = a[i], vis[i] = 1;dfs(num + 1);vis[i] = 0;}}}
}
int main()
{cin >> n;for(int i = 1; i <= n; i++) a[i] = i;dfs(0);return 0;
}

P1088 [NOIP2004 普及组] 火星人

#include 
using namespace std;// 全排列 
int n, m, a[10005], vis[10005], f1, f2;
void dfs(int num){if(f2 == 1) return;if(num > n){f1++ ;if(f1 == m + 1){for(int i = 1; i < num; i++)cout << a[i] << " ";cout << endl;f2 = 1;}}for(int i = 1; i <= n; i++){if(! f1) i = a[num];if(! vis[i]){a[num] = i, vis[i] = 1;dfs(num + 1);vis[i] = 0;}}
}
int main()
{cin >> n >> m;for(int i = 1; i <= n; i++) cin >> a[i];dfs(1);return 0;
}

计算序列全排列的函数:next_permutation(start,end),和prev_permutation(start,end)。这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列

#include
using namespace std;
int main(){int n,m;cin>>n>>m;int ord[n+1];for(int i=1;i<=n;++i)    cin>>ord[i];for(int i=1;i<=m;++i)    next_permutation(ord+1,ord+1+n);for(int i=1;i

相关内容

热门资讯

7月3日港股通非银ETF(51... 7月3日,港股通非银ETF(513750)涨0.00%,成交额5.06亿元。当日份额增加1.00亿份...
7月3日港股消费50ETF(1... 7月3日,港股消费50ETF(159265)跌0.59%,成交额5139.80万元。当日份额减少10...
畅联股份涨2.75%,成交额3... 7月4日,畅联股份盘中上涨2.75%,截至09:35,报11.21元/股,成交3140.94万元,换...
德尔未来涨2.28%,成交额5... 7月4日,德尔未来盘中上涨2.28%,截至09:35,报4.93元/股,成交5497.97万元,换手...
山东玻纤大涨7.46%,成交额... 7月4日,山东玻纤盘中上涨7.46%,截至09:35,报8.36元/股,成交1.42亿元,换手率2....
天银机电跌2.34%,成交额9... 7月4日,天银机电盘中下跌2.34%,截至09:35,报17.14元/股,成交9256.78万元,换...
奥锐特涨2.41%,成交额19... 7月4日,奥锐特盘中上涨2.41%,截至09:35,报22.09元/股,成交1997.73万元,换手...
创100ETF融通(15980... 7月4日,创100ETF融通(159808)开盘跌0.12%,报0.824元。创100ETF融通(1...
聚和材料涨2.13%,成交额5... 7月4日,聚和材料盘中上涨2.13%,截至09:35,报45.07元/股,成交5601.55万元,换...
凯美特气跌4.52%,成交额3... 7月4日,凯美特气盘中下跌4.52%,截至09:35,报12.66元/股,成交3.92亿元,换手率4...