最大子序列和
dp转移方程 sum[i] = max{sum[i-1]+a[i],a[i]}
int MaxSum(int n)
{
int sum=0,tmp=0;
for(int i=0;i<n;i++)
{
if(tmp>0)
tmp+=a[i];
else
tmp=a[i];
if(tmp>sum)
sum=tmp;
}
return sum;
}
递归求全排列
先处理第一层,比如123 第一位置分别和第一个位置、第二个位置、第三个位置交换 ->{123 213 321}
再递归处理第二层 比如 123 第二位置分别和第二位置、第三位置交换 ->{ 123 132}
再递归处理第三层 比如 123 第三位置和第三位置交换 ->{123}
然后就是回溯分别处理
#include <stdio.h>
#include <algorithm>
using namespace std;
int ans = 0;
void permutation(int k, int n, int a[])
{
if(k == n-1){
ans+=1;
for(int i = 0; i < n; ++i)
printf("%d ", a[i]);
puts("");
}else{
for(int i = k; i < n; ++i){
swap(a[k],a[i]);
permutation(k+1, n, a);
swap(a[k],a[i]);
}
}
}
int main()
{
freopen("1.txt","w",stdout);
int a[100];
int n = 3;
for(int i = 0; i < n; ++i)
a[i] = i+1;
permutation(0, n, a);
printf("%d\n",ans);
return 0;
}
多做点记录,只有好处,没坏处。认真一点,进个大公司!
原文:http://www.cnblogs.com/ya-cpp/p/7622997.html