Loading [MathJax]/extensions/tex2jax.js

[洛谷 2946][USACO09MAR]牛飞盘队

题目链接

https://www.luogu.org/problem/P2946

题解

一道很简单的背包问题。

用 \(f_{i,j}\) 代表选到第 \(i\) 头奶牛,\( \bmod F\) 之后余数为 \(j\) 的方案数。

那么,我们有两种决策:选当前的奶牛和不选。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <stdio.h>
#define MOD 100000000
int f[2005][1005],a[2005];
int main()
{
int n,F;
scanf("%d%d",&n,&F);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
f[i][a[i]%F]=1;
}
for(int i=1;i<=n;i++)
for(int j=0;j<F;j++)
f[i][j]+=(f[i-1][j]+f[i-1][((j-a[i])%F+F)%F])%MOD,f[i][j]%=MOD;
printf("%d",f[n][0]);
return 0;
}
#include <stdio.h> #define MOD 100000000 int f[2005][1005],a[2005]; int main() { int n,F; scanf("%d%d",&n,&F); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); f[i][a[i]%F]=1; } for(int i=1;i<=n;i++) for(int j=0;j<F;j++) f[i][j]+=(f[i-1][j]+f[i-1][((j-a[i])%F+F)%F])%MOD,f[i][j]%=MOD; printf("%d",f[n][0]); return 0; }
#include <stdio.h>
#define MOD 100000000
int f[2005][1005],a[2005];
int main()
{
 int n,F;
 scanf("%d%d",&n,&F);
 for(int i=1;i<=n;i++)
 {
  scanf("%d",&a[i]);
  f[i][a[i]%F]=1;
 }
 for(int i=1;i<=n;i++)
  for(int j=0;j<F;j++)
   f[i][j]+=(f[i-1][j]+f[i-1][((j-a[i])%F+F)%F])%MOD,f[i][j]%=MOD;
 printf("%d",f[n][0]);
 return 0;
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理