#include<iostream>
#include<numeric>
#include<string>
#include<cstring>
#include<functional>
#include<hash_map>
#include<hash_set>
#include<algorithm>
#include <iomanip>
using namespace std;
int main()
{
const int N=4;
int a[N+1]={0,4,3,7,1};
int sum=0;
for(int i=0;i<=N;i++)
sum+=a[i];
//定义内存
int **p=new int*[N+1];
for(int i=0;i<=N;i++){
p[i]=new int[sum+1];
}
//初始化
for(int row=0;row<=N;row++)
for(int col=0;col<=sum;col++)
p[row][col]=-1;
p[0][0]=0;
for(int k=1;k<=N;k++)//考虑到第k个,并非表示一共k个
{
for(int i=k;i>=1;i--)//填在第i列,表示一共i个
{
for(int t=1;t<=sum;t++)
{
if( t>=a[k] && p[i-1][ t-a[k] ]>=0 )
p[i][t]=t-a[k];
}
}
}
//打印出dp形成的二维数组
for(int col=0;col<=sum;col++)
{
for(int row=0;row<=N;row++)
cout<<" "<<setw(2)<<p[row][col];
cout<<endl;
}
//找路径,打印出 Num个数据 形成的和为sss的数据
int sss=8;
int num=3;
if(p[num][sss]==-1)
{
cout<<"no solution"<<endl;
return 0;
}
while(num)//只考虑了有解的情况
{
cout<<" "<<sss-p[num][sss];
sss=p[num--][sss];
}
system("pause");
return 0;
}
编程之美 数组分割 (能打印具体数据)
最新推荐文章于 2023-07-17 16:03:38 发布