赞
踩
第一题不做赘述,直接上代码
- #include<bits/stdc++.h>
- using namespace std;
-
- const int N=100000000;
-
- int init=[](){
- int res=0;
- for(int i=1;i<=N;i*=10){
- int tmp=i,count=0;
- while(tmp) {
- ++count;
- tmp/=10;
- }
- if(count&1)continue;
- for(int j=i;j<i*10;++j){
- int sum=0;
- tmp=j;
- for(int k=count;k>0;--k,tmp/=10){
- if(k>count/2)sum+=(tmp%10);
- else sum-=(tmp%10);
- }
- if(!sum)++res;
- }
- }
- return res;
- }();
-
- int main(){
- cout<<init<<endl;
- return 0;
- }
第二题,我刷背包问题刷成傻子了一直往背包问题思考,后面实在不行我就换了思路。
- #include <bits/stdc++.h>
- using namespace std;
-
- long long B=[](){
- long long dp[31][10]={0};//防止答案大于INT_MAX
- dp[0][0]=1;
-
- for(int i=1;i<=30;++i){
- for(int j=0;j<=9;++j){//如果小明100分就停止作答,不符合最后得分70的情况
- if(j>0)//答对:在0~j-1尾部后面加上true,不影响分数为j的情况
- dp[i][j]=dp[i-1][j-1];
- else//答错:在题目为i-1时所有分数后面加上false,统统都变成了0分
- for(int k=0;k<=9;++k)
- dp[i][0]+=dp[i-1][k];
- }
- }
- return dp[30][7];
- }();
-
- int main(){
- cout<<B<<endl;
- return 0;
- }
第一题答案:4430091
第二题答案:4165637
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。