C++学习日记(玩具谜题AC,)

今天的第一题是 玩具谜题(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;
}
打算八月中旬把《背包九讲》看完再往深的学动规 微笑
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值