#include<bits/stdc++.h>usingnamespace std;typedeflonglong ll;constint N =300;int n;boolPrime(int x){for(int i =2; i * i <= x; i++)if(x % i ==0)return0;return1;}intmain(){
cin >> n;int num =0;if(n ==1) cout <<1<< endl;else{for(int i =2;; i++){if(n ==1)break;if(Prime(i)){
num =0;while(n % i ==0){
num++;
n /= i;}if(num){
cout << i;if(num >1) cout <<"^"<< num;if(n >1) cout <<"*";}}}}}
7-2 英雄出场王
#include<bits/stdc++.h>usingnamespace std;typedeflonglong ll;constint N =1010;int n, x;structhero{int cnt, id;} a[N];boolcmp(hero x, hero y){if(x.cnt == y.cnt)return x.id < y.id;elsereturn x.cnt > y.cnt;}int v[N];intmain(){
cin >> n;int mx =-1;for(int i =0; i < n; i++){
cin >> x;
v[x]++;
mx =max(x, mx);}int num =0;for(int i =0; i <= mx; i++){if(v[i]){
a[num].id = i;
a[num++].cnt = v[i];}}sort(a, a + num, cmp);
cout << a[0].id <<'\n'<< a[0].cnt;}
7-3 最佳组队问题
#include<bits/stdc++.h>usingnamespace std;typedeflonglong ll;constint N =110;int n, ans;int vis[N];int p[N][N];voidDFS(int i,int sum){if(i > n){
ans =max(ans, sum);return;}for(int j =1; j <= n; j++){if(!vis[j]){
vis[j]=1;DFS(i +1, sum + p[i][j]);
vis[j]=0;}}}intmain(){while(cin >> n){
ans =0;memset(vis,0,sizeof(vis));for(int i =1; i <= n; i++)for(int j =1; j <= n; j++)
cin >> p[i][j];DFS(1,0);
cout << ans << endl;}}
7-4 回文串的切割
#include<bits/stdc++.h>usingnamespace std;typedeflonglong ll;constint N =110;const ll MOD =1e9+7;
map<string,ll>mp;boolpd(string str){
string s1 = str;reverse(str.begin(), str.end());return str == s1;}longlongdfs(string str){if(str.size()<=1)return1;longlong ans =0;for(int i =0; i < str.size();++i){if(pd(str.substr(0, i +1))){
string s = str.substr(i +1);if(mp.count(s)==0) mp[s]=dfs(s)% MOD;
ans =(ans + mp[s])% MOD;}}return ans;}intmain(){
string s;getline(cin, s);if(s.empty()) cout <<0<< endl;else cout <<dfs(s);return0;}
7-5 和谐宿舍
#include<bits/stdc++.h>usingnamespace std;typedeflonglong ll;#defineINF0x3f3f3f3fconstint N =110;int dp[N][N], h[N], t[N][N];int n, m;intmain(){
cin >> n >> m;for(int i =1; i <= n; i++){
cin >> h[i];
t[i][i]= h[i];}for(int i =1; i < n; i++)for(int j = i +1; j <= n; j++)
t[i][j]=max(t[i][j -1], h[j]);for(int i =1; i <= n; i++){
dp[i][1]= i * t[1][i];for(int j =2; j <= m && j <= i; j++){
dp[i][j]= INF;for(int k =1; k <= i - j +1; k++)
dp[i][j]=min(dp[i][j], dp[i - k][j -1]+ k * t[i - k +1][i]);}}
cout << dp[n][m]<< endl;}
7-6 h0221.激光炸弹
#include<bits/stdc++.h>usingnamespace std;typedeflonglong ll;constint N =5010;int n, x, y, w, r;int s[N][N];intmain(){
cin >> n >> r;
r =min(5001, r);int mx = r, my = r;for(int i =0; i < n; i++){
cin >> x >> y >> w;
x++, y++;
s[x][y]+= w;
mx =max(mx, x);
my =max(my, y);}for(int i =1; i <= mx; i++)for(int j =1; j <= my; j++)
s[i][j]+= s[i -1][j]+ s[i][j -1]- s[i -1][j -1];int ans =0;for(int i = r; i <= mx; i++)for(int j = r; j <= my; j++)
ans =max(ans, s[i][j]- s[i - r][j]- s[i][j - r]+ s[i - r][j - r]);
cout << ans << endl;}