int dp[1000001]; int nums[1000001]; intmain(){ int N; while(cin>>N){ if (N==EOF)break; int maxnum=INT_MIN; for (int i=1;i<=N;i++){ cin>>nums[i]; } dp[1]=nums[1]; if (N==1){ cout<<dp[1]<<endl; break; } for (int i=2;i<=N;i++){ dp[i]=max(nums[i],dp[i-1]+nums[i]); maxnum=max(dp[i],maxnum); } cout<<maxnum<<endl; } return0; }
int dp[101]; int matrix[101][101]; int support[101][101]; int arr[101];
inthangmax(int n){ int maxnum; for (int i=1;i<=n;i++){ dp[i]=max(arr[i],dp[i-1]+arr[i]); maxnum=max(maxnum,dp[i]); } return maxnum; }
intallmax(int n){ int maxnum; for (int i=1;i<=n;i++){ for (int j=i;j<=n;j++){ for (int k=1;k<=n;k++){ if (i==1){ arr[k]=support[j][k]; }else{ arr[k]=support[j][k]-support[i-1][k]; } } maxnum=max(hangmax(n),maxnum); } } return maxnum; }
intmain(){ int n; cin>>n; for (int i=1;i<=n;i++){ for (int j=1;j<=n;j++){ cin>>matrix[i][j]; } } for (int i=1;i<=n;i++){ for (int j=1;j<=n;j++){ if (i==1)support[i][j]=matrix[i][j]; else{ support[i][j]=matrix[i][j]+support[i-1][j]; } } } int maxnum; maxnum=allmax(n); cout<<maxnum<<endl; return0; }
intcountmax(int n){ int maxnum=0; for (int i=1;i<=n;i++){ dp[i]=1; } for (int i=2;i<=n;i++){ for (int j=1;j<i;j++){ if (daodan[i]<=daodan[j]) dp[i]=max(1,dp[j]+1); maxnum=max(maxnum,dp[i]); } } return maxnum; }
intmain(){ int n; cin>>n; for (int i=1;i<=n;i++){ cin>>daodan[i]; } int maxnum; maxnum=countmax(n); cout<<maxnum<<endl; return0; }
intcountmax(int n){ int maxsum; for (int i=1;i<=n;i++){ dp[i]=nums[i]; } for (int i=2;i<=n;i++){ for (int j=1;j<i;j++){ if (nums[i]>nums[j]) dp[i]=max(nums[i],dp[j]+nums[i]); maxsum=max(maxsum,dp[i]); } } return maxsum; }
intmain(){ int n; cin>>n; for (int i=1;i<=n;i++){ cin>>nums[i]; } int maxsum; if (n==1){ cout<<nums[1]; return0; } maxsum=countmax(n); cout<<maxsum<<endl; return0; }
intcountmax(string s1,string s2){ int length1=s1.size(); int length2=s2.size(); int dp[length1][length2]; for (int i=0;i<length1;i++){ for (int j=0;j<length2;j++){ dp[i][j]=0; } } int maxnum=0; for (int i=0;i<length1;i++){ for (int j=0;j<length2;j++){ if (s1[i]==s2[j]){ if (i==0||j==0){ dp[i][j]=1; }else{ dp[i][j]=dp[i-1][j-1]+1; } }else{ if (i==0||j==0){ dp[i][j]=0; }else{ dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } maxnum=max(maxnum,dp[i][j]); } } return maxnum; } intmain(){ while(cin>>s1>>s2){ int maxnum=countmax(s1,s2); cout<<maxnum<<endl; } return0; }
intmain(){ int C,N; while (cin>>C>>N){ if (C==0&&N==0)break; int dp[C+1]; d deal[N]; for (int i=0;i<=C;i++){ dp[i]=0; } for (int i=0;i<N;i++){ int price; int score; cin>>price>>score; deal[i].price=price; deal[i].score=score; } for (int i=0;i<N;i++){ for (int j=C;j>=1;j--){ if (j>=deal[i].price){ dp[j]=max(dp[j-deal[i].price]+deal[i].score,dp[j]); } } } cout<<dp[C]<<endl; } return0; }
if (n==0)break; if (n==2){ cout<<-1<<endl; continue; } bool sushu[n+1]; for (int i=2;i<=n;i++){ sushu[i]=true; } for (int i=2;i<=n;i++){ if (sushu[i]==false)continue; for (int j=i;j*i<=n;j++){ //j直接从i开始,提高效率 if (j*i<n){ sushu[j*i]=false; } } } for (int i=2;i<n;i++){ if (sushu[i]){ if (i%10==1){ cout<<i<<" "; } } } cout<<endl; } return0; }
structMatrix{ int matrix[10][10]; int row; int col; Matrix(int a,int b):row(a),col(b){}//注意构造函数的写法 }; Matrix Multiply(Matrix a,Matrix b){ Matrix ans=Matrix(a.row,b.col); for (int i=0;i<a.row;i++){ for (int j=0;j<b.col;j++){ int temp=0; for (int k=0;k<a.col;k++){ temp+=a.matrix[i][k]*b.matrix[k][j]; } ans.matrix[i][j]=temp; } } return ans; }
voidprintMatrix(Matrix m){ int row=m.row; int col=m.col; for (int i=0;i<row;i++){ for (int j=0;j<col;j++){ if (j!=0){ cout<<" "; } cout<<m.matrix[i][j]; } cout<<endl; } }
intmain(){ Matrix a=Matrix(2,3); Matrix b=Matrix(3,2); for (int i=0;i<2;i++){ for (int j=0;j<3;j++){ cin>>a.matrix[i][j]; } } for (int i=0;i<3;i++){ for (int j=0;j<2;j++){ cin>>b.matrix[i][j]; } } Matrix c=Multiply(a,b); printMatrix(c); return0; }
structedge{ int a; int b; int weight; booloperator>(edge c)const{ return weight>c.weight; } edge(int q,int w,int e):a(q),b(w),weight(e){} };
priority_queue<edge,vector<edge>,greater<edge>>edges; int graph[100];
intfind(int x){ if (graph[x]==-1)return x; else{ int temp; temp=find(graph[x]); graph[x]=temp; return temp; } }
intmain(){ int n; while (cin>>n){ if (n==0)break; int a,b,weight; int num=n*(n-1)/2; memset(graph,-1,sizeof(graph)); for (int i=1;i<=n;i++){ graph[i]=-1; } while (num--){ cin>>a>>b>>weight; edge edge1=edge(a,b,weight); edges.push(edge1); } int sum=0; int count=0; while (!edges.empty()&&count<n-1){ edge temp=edges.top(); edges.pop(); int a=find(temp.a); int b=find(temp.b); int weight=temp.weight; if (a!=b){ graph[a]=b; count++; sum+=weight; } } cout<<sum<<endl; } return0; }
弗洛伊德
1 2 3 4 5 6 7 8 9
for (int k = 1;k <= n;k ++) { for (int i = 1;i <= n;i ++) { for (int j = 1;j <= n;j ++) { if (ans[i][k] == 无穷 || ans[k][j] == 无穷) continue; if (ans[i][j] == 无穷 || ans[i][k] + ans[k][j] < ans[i][j]) ans[i][j] = ans[i][k] + ans[k][j]; } } }
queue<int>zero; vector<int>re; structedge{ int to; int weight; }; int in[100001]; vector<edge>edges[100001]; int task[100001]; int earliest[100001]; int latest[100001];
intmain(){ int n,m; cin>>n>>m; for (int i=1;i<=n;i++){ in[i]=0; cin>>task[i]; } int num=m; int allTime=0; cout<<"input edge"<<endl; while (num--){ int a,b; cin>>a>>b; in[b]++; edge temp; temp.to=b; temp.weight=task[b]; edges[a].push_back(temp); } cout<<"input finished."<<endl; for (int i=1;i<=n;i++){ cout<<"earliest["<<i<<"]:"<<earliest[i]<<endl; if (in[i]==0){ zero.push(i);
} } while (!zero.empty()){ int node=zero.front(); cout<<"zero:"<<node<<endl; zero.pop(); re.push_back(node); for (int i=0;i<edges[node].size();i++){ int to=edges[node][i].to; int weight=edges[node][i].weight; cout<<"edge:"<<node<<"-"<<to<<":"<<weight<<endl; earliest[to]=max(earliest[to],earliest[node]+task[node]); cout<<"earliest["<<to<<"]:"<<earliest[to]<<endl; in[to]--; if (in[to]==0){ zero.push(to); } } } for (int i=1;i<=n;i++){ allTime=max(allTime,earliest[i]+task[i]); } cout<<"reverse:"<<endl; for (int i=re.size()-1;i>=0;i--){ int u=re[i]; if (edges[u].size()==0){ latest[u]=allTime-task[u]; cout<<"latest:["<<u<<"]:"<<latest[u]<<endl; }else{ latest[u]=99999999; } for (int j=0;j<edges[u].size();j++){ int to=edges[u][j].to; int weight=edges[u][j].weight; latest[u]=min(latest[u],latest[to]-task[u]); cout<<"latest:["<<u<<"]:"<<latest[u]<<endl; } } cout<<endl; for (int i=1;i<=n;i++){ cout<<"earliest["<<i<<"]:"<<earliest[i]<<endl; cout<<"latest["<<i<<"]:"<<latest[i]<<endl; }
int sum=1;
for (int i=1;i<=n;i++){ sum*=(latest[i]-earliest[i]+1); } cout<<allTime<<endl; cout<<sum<<endl; return0; }