Dynamic programing的本质是什么? 状态的转换。
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
const int NUM=16000;
int dp[21][NUM];
int C[21];
int G[21];
int main()
{
freopen("input.txt","r",stdin);
int c,g;
while(scanf("%d %d",&c,&g)!=EOF)
{
for(int i=1;i<=c;i++)
{
scanf("%d",&C[i]);
}
for(int i=1;i<=g;i++)
{
scanf("%d",&G[i]);
}
memset(dp,0,sizeof(dp));
dp[0][8000]=1;
for(int i=1;i<=g;i++)
{
for(int j=500;j<=15500;j++)
{
for(int k=1;k<=c;k++)
{
int det=G[i]*C[k];
dp[i][j]+=dp[i-1][j-det];
}
}
}
printf("%d\n",dp[g][8000]);
}
return 0;
}
438

被折叠的 条评论
为什么被折叠?



