今天的第一题是 玩具谜题(toy) noip2016提高组D1T1
第一题就是水,看完题思路也想好了,五分钟搞定代码,加上注释总共花了十五分钟。
暴力模拟轻松无剪枝通过
附上代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,a,b,j=1,f[100005]; //a b作为题目问题无需保存用完直接覆盖
string nam[100005]; //j是位置坐标,用string保存名字
int main()
{
cin>>n>>m;
for (int i=1;i<=n;i++)cin>>f[i]>>nam[i];
for (int i=1;i<=m;i++)
{
cin>>a>>b;
if ((a+f[j])%2==0) //观察可得,后附详细推论过程
{
if (j-b<1)j=n-b+j; //处理边界循环
else j-=b;
}
else {
if (j+b>n)j=j-n+b; //处理边界循环
else j+=b;
}
}
cout<<nam[j]<<endl;
return 0;
}
/*
一道noip水题,推论(有点经验就能看得出来):
1(朝外坐)+1(右手边)=0(朝内坐)+0(左手边)=顺时针
1(朝外坐)+0(左手边)=0(朝内做)+1(右手边)=逆时针
*/
除了这题大水外从今天开始打算彻底学一遍《背包九讲》
应为之前看过前三讲所以迅速的过了一遍前三讲顺便写了个程序
#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int V,f[1000000];
void ZOP(int cost,int weight) //ZeroOnePack 01背包
{
for (int i=V;i>=cost;i--)
f[i]=max(f[i-1],f[i-cost]+weight);
}//01背包计算单个物品的函数
void CP(int cost,int weight) //CompletePack 完全背包
{
for (int i=cost;i<=V;i++)
f[i]=max(f[i-1],f[i-cost]+weight);
}//完全背包计算单个物品的函数
void MP(int cost,int weight,int amount) //MulpitlePack 多重背包
{
if (cost*amount>V) /* 因为如果这个物品全部拿的体积大于总容量的话其实无异于说这个物品有
{ 无限的数量*/
CP(cost,weight);
return ;
}
int k=1;
while (k<amount) //把n个物品分解成 1,2,4..,2^(k-1)
{
ZOP(cost*k,weight*k);
amount-=k;
k+=k;
}
ZOP(cost*amount,weight*amount); //剩下的再合并成另一个物品
}//多重背包计算单个物品的函数
int main()
{
return 0;
}
打算八月中旬把《背包九讲》看完再往深的学动规