您的位置:首页 > 其它

USACO/rockers 3.4.4 动态规划

2013-05-26 00:33 731 查看
状态方程总是难想的。

#include <stdio.h>
#include <stdlib.h>

int max(int a,int b)
{
if(a<b)
return b;
return a;
}

int main()
{
FILE *fin=fopen("rockers.in","r");
FILE *fout=fopen("rockers.out","w");
int n;
int m;
int t;
int i ,j,k;
int songtime[30]={0};
int ans[30][30][30]={0};                         //ans[i][j][k]表示前i 首歌用的j个盘子
fscanf(fin,"%d %d %d",&n,&t,&m);                //最后一个用了k时间的最多曲目数
for(i=1;i<=n;i++)
fscanf(fin,"%d",&songtime[i]);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
for(k=1;k<=t;k++)
if(k<songtime[i])                 //表示不能加第i首歌
{
ans[i][j][k]=max(ans[i-1][j-1][t],ans[i-1][j][k]);
}
else                               //表示可以加第i首歌
{
ans[i][j][k]=max(ans[i-1][j-1][t],ans[i-1][j][k-songtime[i]])+1;
}
fprintf(fout,"%d\n",ans
[m][t]);
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  USACO 动态规划