宿州科技网站建设,时间管理系统 网站开发,零食类营销网站怎么做,响应式旅游网站模版题挺好的#xff0c;收获了许多
1.暴力枚举#xff08;许多巧妙地处理细节方法#xff09; n是1--9,于是我们可以直接暴力#xff0c;对于1注意特判开头0但N#xff01;1#xff0c;对于情报4#xff0c;我们可以把a,b,c,d的所有取值枚举一遍#xff0c;那么如何判断有…题挺好的收获了许多
1.暴力枚举许多巧妙地处理细节方法 n是1--9,于是我们可以直接暴力对于1注意特判开头0但N1对于情报4我们可以把a,b,c,d的所有取值枚举一遍那么如何判断有无前导0我们只要与10000...比即可最后用2和3判断一下放入set中去重。
这里有一个小性质判断是否可以被8除只要看后3位因为前面的都乘了1000.
下面是AC代码
#includebits/stdc.h
using namespace std;
const int mod1e97;
int t,n,y;
string s;
void solve(){setintst;if(s[0]0n!1){cout0;return;}int mi1;for(int i2;in;i) mi*10;if(n1) mi0;for(int a0;a9;a){for(int b0;b9;b){for(int c0;c9;c){for(int d0;d9;d){if(ab||ac||ad||bc||bd||cd) continue;for(int _0;_9;_){int x0;for(int j0;jn;j){if(s[j]9s[j]0){xx*10(s[j]-0);}else{if(s[j]a){xx*10a;}else if(s[j]b){xx*10b;}else if(s[j]c){xx*10c;}else if(s[j]d){xx*10d;}else{xx*10_;}}}if(xmixyx%80) st.insert(x); }}}}}coutst.size()%mod;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cint;while(t--){cinnsy;solve();coutendl;}
}
2.思维 我们不妨把绝对值拆开发现它就是两个点的min的两倍那么对于任意两个点最小dis可能是这两个点较小的2倍也可能是绕过最小点a[1]的4倍。
于是我们sort一下从小到大枚举每一个点的贡献即可。
下面是AC代码
#includebits/stdc.h
using namespace std;
int n,t,a[200010];
bool cmp(int a,int b){return ab;
}
void solve(){cinn;for(int i1;in;i) scanf(%d,a[i]);sort(a1,an1,cmp);long long sum0;for(int i1;in;i){sum4ll*min(2*a[1],a[i])*(n-i);}coutsum;
}
int main(){cint;while(t--){solve();coutendl;}
}
3.DP 直接按照题目要求DP会TLE因此我们可以预先维护好每一张卡牌走1---n步的最小花费同时注意到modn的性质走n次一定会回到原点以此判断结尾。
dp[i][j]表示最大走i步后使聚合卡提高到j的最小代价dp[0][0]0,求dp[n][n-k],易得状态转移方程
dp[i][j]min(dp[i-1][j],dp[i-1][(j-in)%n]min[i]),其中我们只用减一个i即可因为走更多的话就不满足最大走i步的条件
下面是AC代码
#includebits/stdc.h
using namespace std;
long long t,n,m,k,c[1110],a[1100],mins[5005],dp[5005];
bool vis[5002];
void solve(){for(int i0;in;i) mins[i]2e18; for(int i0;in;i) dp[i]2e18;for(int i1;im;i){for(int j1;;j){if((a[i]*j)%na[i]%nj1) break;int u(a[i]*j)%n;mins[u]min(mins[u],c[i]*j);}}dp[0]0;for(int i1;in;i){for(int j0;jn;j){dp[j%n]min(dp[j%n],dp[(j-in)%n]mins[i]);}}long long wwdp[n-k];if(ww2e18) cout-1;else coutww;return;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cint;while(t--){cinnmk;for(int i1;im;i) cina[i]c[i];solve();coutendl;}
}