数学+简单dp
蚂蚁感冒
巧妙:蚂蚁碰面就会掉头,这个掉头可以看成是互相穿过身体
#include<iostream>
#include<cstdio>
using namespace std;
int n;
int x[105];
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++) scanf("%d", &x[i]);
int tmp = x[0];
int res = 0,same = 0;
if (tmp < 0)
{
for (int i = 1; i < n; i ++)
{
if (x[i] > 0 && x[i] < abs(tmp))
res ++;
if (x[i] < 0 && x[i] < tmp)
same ++;
}
if (res) res += same;
}else {
for (int i = 1; i < n; i ++)
{
if (x[i] < 0 && abs(x[i]) > tmp)
res ++;
if (x[i] > 0 && x[i] < tmp)
same ++;
}
if (res) res +=same;
}
printf("%d",res + 1);
return 0;
}
地宫取宝(dp)
有点难
数比较小,用四维数组,位置,拿不拿,有多少个,价值多少
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 55, MOD = 1000000007;
int n,m,k;
int w[N][N];
int f[N][N][13][14];
int main()
{
scanf("%d%d%d", &n, &m, &k);
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= m; j ++)
{
scanf("%d", &w[i][j]);
w[i][j]++;
}
f[1][1][1][w[1][1]] = 1;
f[1][1][0][0] = 1;
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= m; j ++)
{
if (i == 1 && j == 1) continue;
for (int u = 0; u <= k; u ++)
for (int v = 0; v <= 13; v ++)
{
int &val = f[i][j][u][v];
val = (val+f[i-1][j][u][v]) % MOD;
val = (val+f[i][j-1][u][v]) % MOD;
if (u > 0 && w[i][j] == v)
for (int c = 0; c < v; c ++)
{
val = (val+f[i-1][j][u-1][c]) % MOD;
val = (val+f[i][j-1][u-1][c]) % MOD;
}
}
}
int res = 0;
for (int i = 0; i <= 13; i ++)
res = (res + f[n][m][k][i]) % MOD;
printf("%d", res);
return 0;
}
实验
除了上了一节课,都在做那个实验
跑出来的代码不如意,师兄让我直接改了试试
优化条件改好了
不过生成了对抗样本之后,如何检验它的成功攻击率?用的模型是否需要经过训练?是直接的自然样本进行训练吗?然后用对抗样本对训练过的模型进行攻击?
需要再看看论文,并且有源码的论文